我需要让一些名称格式匹配,以便稍后在我的脚本中合并。我的列'Name'是从csv导入的,包含如下名称:
安东尼奥布朗
LeSean McCoy
Le'Veon Bell
对于我的脚本,我想获得名字的第一个字母,并将其与姓氏结合起来....
A.Brown
L.McCoy
L.Bell
以下是我现在每次返回NaaN的内容:
ff['AbbrName'] = ff['Name'].str.extract('([A-Z]\s[a-zA-Z]+)', expand=True)
谢谢!
使用str.replace
方法与^([A-Z]).*?([a-zA-Z]+)$
的另一种选择; ^([A-Z])
捕获字符串开头的第一个字母; ([a-zA-Z]+)$
匹配最后一个单词,然后通过在第一个捕获组和第二个捕获组之间添加.
来重建名称:
df['Name'].str.replace(r'^([A-Z]).*?([a-zA-Z]+)$', r'\1.\2')
#0 A.Brown
#1 L.McCoy
#2 L.Bell
#Name: Name, dtype: object
如果你只是apply()
一个函数将被第一个空格分开并获得第一个单词的第一个字符添加其余的内容怎么办:
import pandas as pd
def abbreviate(row):
first_word, rest = row['Name'].split(" ", 1)
return first_word[0] + ". " + rest
df = pd.DataFrame({'Name': ['Antonio Brown', 'LeSean McCoy', "Le'Veon Bell"]})
df['AbbrName'] = df.apply(abbreviate, axis=1)
print(df)
打印:
Name AbbrName
0 Antonio Brown A. Brown
1 LeSean McCoy L. McCoy
2 Le'Veon Bell L. Bell
即使没有正则表达式,这应该足够简单。使用字符串拆分和串联的组合。
df.Name.str[0] + '.' + df.Name.str.split().str[-1]
0 A.Brown
1 L.McCoy
2 L.Bell
Name: Name, dtype: object
如果Name
柱有可能具有前导空间,则用df.Name.str[0]
替换df.Name.str.strip().str[0]
。
警告:列必须至少有两个名称。
你得到NaaN,因为你的正则表达式与名字不匹配。
相反,我会尝试以下方法:
parts = ff[name].split(' ')
ff['AbbrName'] = parts[0][0] + '.' + parts[1]