#pandas #dataframe #numpy #numpy-ndarray
Вопрос:
Вот тестовый фрейм данных pandas для воспроизведения ошибки в pandas >= 1.1.0
df = pd.DataFrame({'A':[1,2,5], 'B':['abc', 'cde', 4], 'C': [.01,4.5, 6.7]})
Что работает —
def custom_func(row):
if not isinstance(row[1], str):
return row[0] row[2]
else:
return 0
Примените функцию, как показано ниже —
df.apply(lambda row: custom_func(row), axis=1, raw=True)
df.apply(lambda row: custom_func(row), axis=1)
В тот момент, когда мы возвращаем кортеж или несколько значений из пользовательской функции apply, она начинает выдавать ошибку значения.
Не Работает —
def custom_func_does_not_work(row):
if not isinstance(row[1], str):
return row[0] row[2], row[0]*row[2]
else:
return 0, row[0]
Применить функцию как —
df.apply(lambda row: custom_func_does_not_work(row), axis=1, raw=True)
В тот момент , когда я удаляю raw=True
, это работает нормально.
df.apply(lambda row: custom_func_does_not_work(row), axis=1)
Если вы понизите рейтинг панд, скажем, до 0.23.4, это прекрасно работает raw=True
.
Ошибка, которую вы видите в приведенном выше случае, заключается в —
ValueError: Shape of passed values is (3, 2), indices imply (3, 3)
Я понимаю ошибку, но не уверен, что в ней есть скрытый переключатель, pandas.DataFrame.apply
который может помочь нам вернуть кадр с raw=True
Причина, по которой я использую raw=True
, заключается в чистой производительности, выше приведен небольшой пример, custom_func на самом деле намного сложнее и, следовательно, хотел бы использовать raw=True
.