Name=pd.Series(['Ashton Smith', 'Diego Maradona ', 'Torres, Anna'])
frame ={'InputNames':Name}
result = pd.DataFrame(frame)
result1=result.InputNames.str.split(expand=True)
result['name0']=result1[0]
result['name1']=result1[1]
result


我试图选择名字和姓氏中的前三个字母,然后将其组合。

但是,当我定义我的功能时有一个问题。

def my_fun(x, var1, var2, var3):
    print (x)
    if x[var1].astype(str).str[-1] ==',' :
        x[var3]=x[var1].astype(str).str[0:3]+x[var2].astype(str).str[0:3]
    else:
        x[var3]=x[var2].astype(str).str[0:3]+x[var1].astype(str).str[0:3]
    return x

print (result.apply(lambda x: my_fun(x, 'name0', 'name1','ShortName'), axis=1))


<ipython-input-98-24dd0de94bd1> in my_fun(x, var1, var2, var3)
      1 def my_fun(x, var1, var2, var3):
      2     print (x)
----> 3     if x[var1].astype(str).str[-1] ==',' :
      4         x[var3]=x[var1].astype(str).str[0:3]+x[var2].astype(str).str[0:3]
      5     else:



  AttributeError :(“ str对象没有属性'astype'”,“发生在索引0”)


谁能帮我?

最佳答案

我将简单地遍历数据框。如果您有大数据帧,则可能不是最佳选择。

new_column = []
n = 3 #number of characters you want to split and concanate
for i in result.loc[:, 'InputNames']:
    if ',' in i:
        concanated_string = i.split(', ')[0][:n] + i.split(', ')[1][:n]
    else:
        concanated_string = i.split()[1][:n] + i.split()[0][:n]
    new_column.append(concanated_string)

result['first_last'] = new_column

关于python - 用 Pandas 将每个单词的前N个字符连接在一起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59328089/

10-12 17:18