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’`` 解析器允许使用and、or和not,其语义与相应的按位运算符相同。Series和DataFrame对象得到支持,其行为与普通 Python 求值相同。- Parameters:
- exprstr
要计算的表达式。此字符串不能包含任何 Python statements ,只能包含 Python expressions 。
- parser{‘pandas’, ‘python’},默认为 ‘pandas’
用于从表达式构建语法树的解析器。默认为
'pandas',其解析代码与标准 Python 略有不同。或者,您可以使用'python'解析器来解析表达式,以保持严格的 Python 语义。有关更多详细信息,请参阅 enhancing performance 文档。- engine{‘python’, ‘numexpr’},默认为 ‘numexpr’
用于计算表达式的引擎。支持的引擎有:
None:尝试使用``numexpr``,回退到``python``
'numexpr':“numexpr” 是默认引擎,它使用 numexpr 来计算 pandas 对象,在处理包含大型帧的复杂表达式时可大大提高速度。'python':执行操作,就像在顶层 Python 中使用了eval一样。此引擎通常不太有用。
未来可能会提供更多后端。
- local_dictdict 或 None,可选
本地变量的字典,默认情况下取自 locals()。
- global_dictdict 或 None,可选
全局变量的字典,默认情况下取自 globals()。
- resolversdict-like 或 None 的列表,可选
实现
__getitem__特殊方法的对象的列表,可用于注入额外的命名空间集合以进行变量查找。例如,这在query()方法中用于注入引用相应DataFrame实例属性的DataFrame.index和DataFrame.columns变量。- levelint, optional
要遍历并添加到当前作用域的先前堆栈帧数。大多数用户**不需要**更改此参数。
- targetobject, optional, default None
这是赋值的目标对象。当表达式中存在变量赋值时,会使用此对象。如果存在赋值,则 target 必须支持带有字符串键的项赋值,并且如果要返回副本,还必须支持 .copy()。
- inplacebool,默认 False
如果提供了 target 并且表达式修改了 target,是否原地修改 target。否则,返回修改后的 target 的副本。
- Returns:
- ndarray, numeric scalar, DataFrame, Series, or None
求值给定代码的完成值,如果
inplace=True则为 None。
- Raises:
- ValueError
在许多情况下,可能会引发此类错误:
target=None,但表达式是多行的。
表达式是多行的,但并非所有行都具有项赋值。例如:
a = b + 1 a + 2
这里,不同行上有表达式,使其成为多行,但最后一行没有变量分配给 a + 2 的输出。
inplace=True,但表达式缺少项赋值。
提供了项赋值,但 target 不支持字符串项赋值。
提供了项赋值且 inplace=False,但 target 不支持 .copy() 方法
参见
DataFrame.query评估一个布尔表达式以查询 DataFrame 的列。
DataFrame.eval计算描述 DataFrame 列操作的字符串。
Notes
在算术
%操作中涉及的任何对象的dtype都将被递归地强制转换为float64。有关更多详细信息,请参阅 enhancing performance 文档。
Examples
>>> 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