我有python熊猫数据帧,由Power bi数据源转换支持提供,用于执行python脚本,其中一列由lastname, firstname
组成,我需要它由firstname lastname
组成。
我尝试了以下拆分、反向、连接方法,该方法适用于独立的字符串参数,但在我尝试对 pandas 数据帧中的列数据进行时会生成AttributeError: 'Series' object has no attribute 'split'
。
name = 'LastName, FirstName'
' '.join(reversed(name.split(', ')))
# output = 'FirstName LastName'
import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]},
index=['falcon', 'dog', 'spider', 'fish'])
df
df['full_name'] = ' '.join(reversed(df['full_name'].split(', ')))
# output = AttributeError: 'Series' object has no attribute 'split'
搜索 SO,我在 excel 列和 R 列表中看到了执行这种性质的操作的命中,但我在 python pandas 数据帧中找不到任何列。
在您的情况下,我们可以split
map
PS :::-1
这里的顺序相反
df.full_name=df.full_name.str.split(', ').map(lambda x : ' '.join(x[::-1]))
df.full_name
falcon john doe
dog kate smith
spider susan jones
fish jack edwards
Name: full_name, dtype: object
pandas的字符串方法的组合可以在这里有所帮助:为了速度,我建议在python本身中运行列表理解。Pandas 中的字符串方法主要是为了方便/简单而提供的。
df['full_name'] = df.full_name.str.split(",").str[::-1].str.join(",")
full_name num_legs num_wings num_specimen_seen
falcon john,doe 2 2 10
dog kate,smith 4 0 2
spider susan,jones 8 0 1
fish jack,edwards 0 0 8
错误是因为变量的类型type(df['full_name'])
是<class 'pandas.core.series.Series'>
。将其转换为列表,然后操作:
import pandas as pd
df = pd.DataFrame({'full_name': ['doe, john', 'smith, kate', 'jones, susan', 'edwards, jack' ],
'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]},
index=['falcon', 'dog', 'spider', 'fish'])
print(map(lambda x: x.split(',')[::-1], df['full_name'].tolist()))