python - 根据行不工作适用于熊猫
问题描述
我有一个买方和助理姓名的数据框,如下所示:
df = pd.DataFrame([
{ 'buyer': 'Lebron James', 'assistant': 'Lebron James' },
{ 'buyer': 'Jon Snow', 'assistant': 'Arya Stark' },
{ 'buyer': 'Frodo Baggins', 'assistant': 'Sam Gamyi' }
])
我想把买家的名字分成他们的名字和姓氏,所以预期的输出是:
first_name surname
Lebron James
Jon Snow
Frodo Baggings
为此,我定义了一个函数并尝试使用 apply():
def first_name(row):
return df['buyer'][row].split()[0]
df['first_name'] = df.apply(first_name, axis = 1)
但是,我收到以下错误:
Traceback (most recent call last):
File "<ipython-input-35-f3bcdf3bb991>", line 1, in <module>
df.apply(first_name, axis = 1)
File "/Users/javier.lopez/anaconda3/lib/python3.7/site-packages/pandas/core/frame.py", line 6487, in apply
return op.get_result()
File "/Users/javier.lopez/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py", line 151, in get_result
return self.apply_standard()
File "/Users/javier.lopez/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py", line 257, in apply_standard
self.apply_series_generator()
File "/Users/javier.lopez/anaconda3/lib/python3.7/site-packages/pandas/core/apply.py", line 286, in apply_series_generator
results[i] = self.f(v)
File "<ipython-input-32-410cb25f2482>", line 2, in first_name
return df['buyer'][row].split()[0]
File "/Users/javier.lopez/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py", line 5067, in __getattr__
return object.__getattribute__(self, name)
AttributeError: ("'Series' object has no attribute 'split'", 'occurred at index 0')
我已经理解使用 apply with axis=1 发送行号作为参数,所以我不明白为什么它不起作用。如果我手动将行号作为参数,它会按预期工作:
first_name(1)
解决方案
要回答您的问题,您可以使用:
def first_name(x):
return x.split()[0]
df['first']=df.buyer.apply(first_name)
print(df)
assistant buyer first
0 Lebron James Lebron James Lebron
1 Arya Stark Jon Snow Jon
2 Sam Gamyi Frodo Baggins Frodo
但是,正如@Sandeep 指出的那样,您还应该考虑内置的熊猫解决方案series.str.split()
,您可以使用直接分配列df.assign()
df=df.assign(first=df.buyer.str.split().str[0])
assistant buyer first
0 Lebron James Lebron James Lebron
1 Arya Stark Jon Snow Jon
2 Sam Gamyi Frodo Baggins Frodo
推荐阅读
- java - 在 Android Studio 中动态设置按钮的约束
- python - 如何将凌乱的构建文件夹变成 exe?
- vue.js - 如何在 vue 中使用引导程序
- airflow - 当 catchup = True 时,气流不尊重depends_on_past?
- c# - 打开 .exe 文件,更改代码并使用 Roslyn 运行编辑过的代码?
- angular - 在单元测试中调度输入事件时,永远不会触发表单的值更改
- flutter - Flutter:带有隔离(计算)的内存泄漏
- python - 如何在记录中找到一个单独的属性并在其上形成一个单独的集合?
- node.js - 借助将与参数 json 匹配的 find 方法验证并在数组中选择正确的对象
- typescript - 当我在 TypeScript 中等待 Promise 失败时会收到警告吗?