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' object has no attribute 'astype'", 'occurred at index 0')
有人可以帮助我吗?
最佳答案
将其分开,然后再将其连接回来。无需在此处申请
。
s = pd.Series(['Ashton Smith', 'Diego Maradona ', 'Torres, Anna'])
s1 = s.str.strip().str.split(r'[,\s]+')
s1.str[0].str[:3] + '-' + s1.str[1].str[:3]
0 Ash-Smi
1 Die-Mar
2 Tor-Ann
dtype: object
关于python - 用 pandas 连接字符串中每个单词的前 N 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59328089/