Панды df.подать заявку()

#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. Решает ли это вашу проблему?