我正在使用 Python 3.X。
使用内置函数 eval()
您可以使用对象的字典来使用这样的自定义函数:
from math import *
def one():
# some operations
return 1
functions = {
'__builtins__': None,
'sqrt': sqrt,
'one': one,
}
variables = {
'__builtins__': None,
'pi': pi,
}
expression = 'sqrt(34 * pi) + one()'
eval(expression, variables, functions)
但是eval()
数据框方法不能那样工作。您只能使用这些内置函数:
The supported math functions are sin, cos, exp, log, expm1, log1p, sqrt, sinh, cosh, tanh, arcsin, arccos, arctan, arccosh, arcsinh, arctanh, abs and arctan2
import pandas as pd
import numpy as np
from math import *
df = pd.DataFrame({
'A': [0, 10, 0, 10, 10, 30],
'B': [0, 0, 1000, 1000, 0, 0],
'C': [25, 25, 25, 25, 40, 40]
})
def custom():
# some operations
return 3
functions = {
'custom': custom
}
variables = {
'pi': pi
}
equation = 'D = sqrt(A) + B + custom()'
df.eval(
equation, global_dict=variables, local_dict=functions,
engine='numexpr', inplace=True
)
# ERROR: "custom" is not a supported function
有没有办法在表达式中使用自定义函数?
注意:我知道这可能很危险,但它在我身上
最佳答案
调用局部变量或局部函数时使用@
:
In [45]: equation = 'D = sqrt(A) + B + @custom()'
# NOTE: ------------> ^
In [46]: df.eval(equation, inplace=True)
In [47]: df
Out[47]:
A B C D
0 0 0 25 3.000000
1 10 0 25 6.162278
2 0 1000 25 1003.000000
3 10 1000 25 1006.162278
4 10 0 40 6.162278
5 30 0 40 8.477226
关于python - 如何使用 eval 数据框方法在表达式中使用自定义函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47161939/