python - 用 pandas 连接字符串中每个单词的前 N ​​个字符

标签 python pandas attributeerror

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/

相关文章:

python - 使用 1 个按钮 Django 提交 2 个自定义 Crispy 表单

python - Pandas 中双括号 `[[...]]` 和单括号 `[..]` 索引之间的区别

Python docx 属性错误 : 'WindowsPath' object has no attribute 'seek'

python - 在字典中查找值为列表的项目

python - 使用包含字典值的元素对列表进行排序

python - 如何将旧的 python 代码从 m2crypto 迁移到密码学(摘要的 RSA 签名)

python - 如果行具有相同的 "B column"值,则用最后已知值填充空 "A column"单元格

python - 在 Pandas 中,如果较小,如何将当前行项目设置为上一个?

python - 为什么我打包的 eel 应用程序执行失败 : AttributeError: 'NoneType' object has no attribute 'write'

keras - 模块 'keras.optimizers' 没有属性 'SGD' 。谷歌实验室