熊猫.评估#

熊猫。eval ( expr ,解析器= 'pandas' ,引擎= None , local_dict = None , global_dict = None ,解析器= () , level = 0 , target = None , inplace = False ) [来源] #

使用各种后端将 Python 表达式作为字符串求值。

支持以下算术运算:+-*/**%//(仅限 python 引擎)以及以下布尔运算:|(or)、&(and) 和~(not)。此外,'pandas'解析器允许使用andor、 和 ,not其语义与相应的按位运算符相同。对象SeriesDataFrame支持和行为与普通的 Python 评估一样。

参数
表达式字符串

要评估的表达式。该字符串不能包含任何 Python 语句,只能包含 Python表达式

解析器{'pandas', 'python'}, 默认 'pandas'

用于从表达式构造语法树的解析器。默认的'pandas'解析代码与标准 Python 略有不同。或者,您可以使用解析器解析表达式 'python'以保留严格的 Python 语义。有关更多详细信息,请参阅 增强性能文档。

引擎{'python', 'numexpr'}, 默认 'numexpr'

用于计算表达式的引擎。支持的引擎有

  • None :尝试使用numexpr,回退到python

  • 'numexpr':此默认引擎使用 numexpr 计算 pandas 对象,以在具有大帧的复杂表达式中大幅加速。

  • 'python':执行操作就像eval在顶级 python 中一样。该引擎通常没有那么有用。

将来可能会提供更多后端。

local_dict dict 或 None,可选

局部变量的字典,默认取自 locals()。

global_dict dict 或 None,可选

全局变量的字典,默认取自 globals() 。

类似于 dict 的解析器列表或 None,可选

实现特殊方法的对象列表__getitem__,可用于注入额外的命名空间集合以用于变量查找。例如,这在方法中用于 query()注入 引用其各自 实例属性的DataFrame.index和变量。DataFrame.columnsDataFrame

level整数,可选

要遍历并添加到当前范围的先前堆栈帧的数量。大多数用户不需要更改此参数。

目标对象,可选,默认 None

这是要赋值的目标对象。当表达式中有变量赋值时使用。如果是这样,那么target必须支持使用字符串键进行项目分配,并且如果返回副本,它还必须支持.copy()

inplace布尔值,默认 False

如果提供了target,并且表达式改变了target,是否就地修改target。否则,返回带有突变的目标副本。

返回
ndarray、数值标量、DataFrame、Series 或 None

评估给定代码的完成值或 None if inplace=True

加薪
值错误

在很多情况下都会引发此类错误:

  • target=None,但表达式是多行的。

  • 表达式是多行的,但并非所有表达式都有项目分配。这种安排的一个例子是这样的:

    a = b + 1 a + 2

    在这里,不同行上有表达式,使其成为多行,但最后一行没有分配给a + 2的输出的变量。

  • inplace=True,但表达式缺少项目分配。

  • 提供了项目分配,但目标不支持字符串项目分配。

  • 提供了项目分配且inplace=False,但目标 不支持.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