Python 交换名字和姓氏,并在熊猫中取首字母
我有以下数据集,其中包含两列完整的名称:Python 交换名字和姓氏,并在熊猫中取首字母,python,pandas,string,reverse,Python,Pandas,String,Reverse,我有以下数据集,其中包含两列完整的名称: df = pd.DataFrame({'Player1':[ 'Roger Federer ', 'Alex De Minaur'], 'Player2':['Bernabe Zapata Miralles','Andy Roddick']}) 输出: Player1 Player2 0 Roger Federer Bernabe Zapata Miralles 1 Alex De Mina
df = pd.DataFrame({'Player1':[ 'Roger Federer ', 'Alex De Minaur'], 'Player2':['Bernabe Zapata Miralles','Andy Roddick']})
输出:
Player1 Player2
0 Roger Federer Bernabe Zapata Miralles
1 Alex De Minaur Andy Roddick
但是,我想在pandas数据框中转换这些名称,使其看起来像:
Player1 Player2
0 Federer R. Zapata Miralles B.
1 De Minaur A. Roddick A.
完整的中间名(如有)-完整的姓氏-名字的第一个字母后跟一个点
关于stackoverflow,有几个类似的问题可能会有所帮助:
什么都行 这不是一个非常优雅的解决方案,但是如果数据帧少于几十万行,它就可以正常工作 定义一个只使用本机Python列表方法的函数
def convert_name(col):
return col.split()[1:] + col.split()[0][0] + '.'
我们将把它应用于所需列中的每一行。它获取单元格值,一个字符串,将其拆分为单词,然后将它们组合为:名字后面的所有内容+名字的第一个字符+句号
要将其应用于数据帧,请使用lambda函数
df['Player1'] = df.Player1.apply(lambda x: convert_name(x))
这是Pandas版本的用于在行中循环的。它比循环更有效,并且更好地练习,尽管在大帧中仍然很慢
请注意,如果任何名称的格式不正确(例如,它们只有一个名称),则这将导致错误。您可以在
convert\u name
函数中实现错误处理。字符串方法通常速度较慢,但您可以尝试数据帧执行的以下操作,然后返回原始形状:
s = df.stack()
s1 = s.str.split()
out = s1.str[1:].str.join(" ").add(" "+s.str[0].str[0].add(".")).unstack()
谢谢你的回答。真正的数据帧包含超过10万行,所以我认为这需要很长时间?对我来说,你的回答会导致一个错误:TypeError:“内置函数或方法”对象不可下标。你知道我怎样才能避免这个错误并使它工作吗?
print(out)
Player1 Player2
0 Federer R. Zapata Miralles B.
1 De Minaur A. Roddick A.