#python #pandas
#питон #панды
Вопрос:
У меня есть df:
test2= pd.DataFrame({ 'A':[1, 2, 3], 'B':[4, 5, 6], 'C':[7, 8, 9] })
и я написал простую функцию, такую как:
def add(a,b,c): return a b c
Теперь я использую эту функцию в своем df, используя метод pandas df.apply как:
test2.apply(add(test2['A'], test2['B'], test2['C']),axis=1)
Это дает мне ошибку, говоря ValueError: значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all()
Но когда я изменяю свой код как:
test2.apply(lambda df: add(df['A'],df['B'],df['C']),axis=1)
это работает отлично, давая мне результаты, как я и ожидал.:
0 12 1 15 2 18
Мой вопрос в том, зачем мне нужно лямбда-выражение, если я уже заранее определил свою функцию?
Ответ №1:
Это потому apply
, что ожидает, что функция будет применена к a DataFrame
или a Series
. Если вы вызываете add
три Series
объекта, которые вы ему передаете, вам вообще больше не нужно звонить apply
. Это связано с тем, что добавление уже применимо к Series
объектам. Однако не каждая функция может быть применена таким образом, для чего apply
она и предназначена.
Ошибка, которую вы получаете, связана с тем, что вы передаете Series
функцию, в то время как она ожидает функцию.
Ответ №2:
Измените функцию подписи:
def add(row): return sum(row) out = test2.apply(add, axis=1) print(out) # Output: 0 12 1 15 2 18 dtype: int64
Комментарии:
1. Решает ли это вашу проблему?