Вложенная пользовательская функция Pandas eval() ведет себя по-разному с арифметическими операторами и оболочками pandasPython

Программы на Python
Ответить
Anonymous
 Вложенная пользовательская функция Pandas eval() ведет себя по-разному с арифметическими операторами и оболочками pandas

Сообщение Anonymous »

Введение:
Я пытался использовать «вложенную» пользовательскую функцию с pandas.eval(), но получаю ошибку AttributeError с арифметикой операторы, см. вопрос в конце.
Я получаю один и тот же результат с Dataframe.mul() и с *, где оба результата имеют тип pandas. core.series.Series:

Код: Выделить всё

import pandas as pd

_test = pd.DataFrame({'col1': [1, 2]})

_result_1 = _test["col1"] * 2  # type(_result_1) = 

_result_2 = _test["col1"].mul(2)  # type(_result_2) = 
Я могу использовать арифметический оператор:

Код: Выделить всё

_test["new_col_1"] = _test.eval("col1 * 2")
Возможно использование пользовательской функции:

Код: Выделить всё

def cumsum_function_test(input_series):
return input_series.cumsum()

_test["new_col_4"] = _test.eval("@cumsum_function_test(col1)")
Возможно использование операторов-оболочек pandas (например, Dataframe.mul()) внутри строки или с настраиваемой функцией:

Код: Выделить всё

def cumsum_function_test(input_series):
return input_series.cumsum()

_test["new_col_2"] = _test.eval("col1.mul(2).cumsum()")

_test["new_col_5"] = _test.eval("@cumsum_function_test(col1.mul(2))")
Вопрос:
Но в этом случае я получаю ошибку AttributeError:

Код: Выделить всё

_test["new_col_6"] = _test.eval("@cumsum_function_test(col1 * 2)") # => AttributeError: 'BinOp' object has no attribute 'value'
Как мне обработать уравнение col1 * 2, чтобы использовать его в пользовательской функции?
Результат:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/723 ... hmetic-ope
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»