У меня есть датафрейм с именами покупателя и помощника:
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)