python - 如何使用 eval 数据框方法在表达式中使用自定义函数?

标签 python python-3.x pandas dataframe eval

我正在使用 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/

相关文章:

python - 如何在整个数据框中搜索特定值并返回其列索引和行索引

python - 从数据框 Pandas 中获取单个值

python - 如何将字符串转换为日期 pandas python TypeError : strptime() takes no keyword arguments

python - 缓慢的脚本尝试在列表中查找唯一值

python - Scipy 聚类;使用物理闵可夫斯基度量?

python - 有选择地从另一个 Jupyter Notebook 导入

python-3.x - TkFiledialog.askopenfilename() 在 Windows 10 中启动 "save as"的窗口

python - 如果用户通过他/她的电子邮件访问我的 Flask 网站;我怎样才能得到他/她的电子邮件地址?

python - 如何查询文件字段相关外键

html - BeautifulSoup 中的第 n 个类型 NotImplementedError