pandas.eval#
- pandas.eval(expr, parser='pandas', engine=None, local_dict=None, global_dict=None, resolvers=(), level=0, target=None, inplace=False)[源代码][源代码]#
使用各种后端将Python表达式作为字符串进行评估。
支持以下算术运算:
+
,-
,*
,/
,**
,%
,//``(仅限python引擎)以及以下布尔运算:``|``(或),``&``(与),和``~``(非)。此外,
’pandas’``解析器允许使用:keyword:and,or
,和:keyword:not,其语义与相应的按位运算符相同。:class:`~pandas.Series`和:class:`~pandas.DataFrame`对象得到支持,并且其行为与普通的Python评估相同。警告
eval
可以运行任意代码,这可能使你容易受到代码注入攻击。注入和不受信任的数据。
- 参数:
- exprstr
- 解析器{‘pandas’, ‘python’}, 默认 ‘pandas’
用于从表达式构建语法树的解析器。默认的
'pandas'
解析代码与标准 Python 略有不同。或者,您可以使用'python'
解析器来保留严格的 Python 语义。有关更多详细信息,请参阅 增强性能 文档。- 引擎{‘python’, ‘numexpr’}, 默认 ‘numexpr’
用于评估表达式的引擎。支持的引擎有
None : 尝试使用
numexpr
,如果失败则回退到python
'numexpr'
: 这个默认引擎使用 numexpr 来评估 pandas 对象,以便在包含大帧的复杂表达式中实现大幅速度提升。'python'
: 执行操作就像你在顶级python中eval
一样。这个引擎通常不是那么有用。
未来可能会提供更多的后端。
- local_dict字典或无,可选
一个局部变量的字典,默认从 locals() 获取。
- global_dict字典或无,可选
一个全局变量的字典,默认从 globals() 获取。
- 解析器字典类列表或 None,可选
一个实现了
__getitem__
特殊方法的对象列表,你可以使用它来注入一个额外的命名空间集合,用于变量查找。例如,这在query()
方法中使用,以注入DataFrame.index
和DataFrame.columns
变量,这些变量引用它们各自的DataFrame
实例属性。- 级别int, 可选
要遍历并添加到当前作用域的先前堆栈帧的数量。大多数用户将**不**需要更改此参数。
- 目标对象,可选,默认无
这是赋值的目标对象。它在表达式中有变量赋值时使用。如果是这样,那么 target 必须支持使用字符串键进行项赋值,如果正在返回一个副本,它还必须支持 .copy()。
- inplace布尔值, 默认为 False
如果提供了 target,并且表达式改变了 target,是否就地修改 target。否则,返回带有突变的 target 的副本。
- 返回:
- ndarray, 数值标量, DataFrame, Series, 或 None
如果
inplace=True
,则评估给定代码的完成值或 None。
- 引发:
- ValueError
有许多情况下可能会引发这样的错误:
target=None,但表达式是多行的。
这个表达式是多行的,但并不是所有的都有项分配。这种排列的一个例子是这样的:
a = b + 1 a + 2
这里,有不同行的表达式,使其成为多行,但最后一行没有将 a + 2 的输出赋值给变量。
inplace=True,但表达式缺少项赋值。
提供了项目分配,但 target 不支持字符串项目分配。
提供了项目分配并且 inplace=False,但 target 不支持 .copy() 方法
参见
DataFrame.query
评估一个布尔表达式以查询帧的列。
DataFrame.eval
评估一个描述对 DataFrame 列进行操作的字符串。
注释
在算术
%
操作中涉及的任何对象的dtype
都会递归地转换为float64
。有关更多详细信息,请参阅 增强性能 文档。
例子
>>> df = pd.DataFrame({"animal": ["dog", "pig"], "age": [10, 20]}) >>> df animal age 0 dog 10 1 pig 20
我们可以使用
pd.eval
添加一个新列:>>> pd.eval("double_age = df.age * 2", target=df) animal age double_age 0 dog 10 20 1 pig 20 40