pandas.eval#

pandas.eval(expr, parser='pandas', engine=None, truediv=NoDefault.no_default, local_dict=None, global_dict=None, resolvers=(), level=0, target=None, inplace=False)[源代码]#

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

支持以下算术运算: +, -, *, /, `` ** ``%// (仅限Python引擎)以及以下布尔运算: | (或), & (和),以及 ~ (不)。此外, 'pandas' 解析器允许使用 andor ,以及 not 具有与相应的按位运算符相同的语义。 SeriesDataFrame 对象是受支持的,并且它们的行为与普通的‘Python计算一样。

参数
expr应力

要计算的表达式。此字符串不能包含任何Python statements ,只有Python expressions

parser{‘pandas’,‘python’},默认为‘pandas’

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

engine{‘python’,‘numexpr’},默认为‘numexpr’

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

  • 无:尝试使用 numexpr ,回落到 python

  • 'numexpr' :此默认引擎使用以下命令计算Pandas对象

    Numexpr表示具有大框架的复杂表达式中的大速度提升。

  • 'python' :执行操作,就像您拥有 eval 位居榜首

    级别的 Python 。这个引擎一般没什么用处。

未来可能会有更多的后端可用。

truediv布尔值,可选

是否使用真除法,如在Python中>=3。

1.0.0 版后已移除.

local_dictDict或None,可选

局部变量的字典,默认情况下取自局部变量()。

global_dictDict或None,可选

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

resolvers类词典或无列表,可选

实现的对象的列表 __getitem__ 可用于注入附加命名空间集合以用于变量查找的特殊方法。例如,它用在 query() 方法以将 DataFrame.indexDataFrame.columns 引用其各自的变量 DataFrame 实例属性。

level整型,可选

要遍历并添加到当前作用域的先前堆栈帧的数量。大多数用户将 not 需要更改此参数。

target对象,可选,默认为无

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

inplace布尔值,默认为False

如果 target ,并且该表达式会发生变化 target ,是否修改 target 就位。否则,请返回 target 与突变有关。

退货
Ndarray、数字标量、DataFrame、系列或无

计算给定代码的完成值,如果 inplace=True

加薪
ValueError

在许多情况下,可能会引发此类错误:

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

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

    A=b+1a+2

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

  • inplace=True ,但该表达式缺少项赋值。

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

  • 提供了项目分配,并且 inplace=False ,但是 target 不支持 .copy() 方法

参见

DataFrame.query

计算布尔表达式以查询框架的列。

DataFrame.eval

计算描述DataFrame列上的操作的字符串。

注意事项

这个 dtype 算术中涉及的任何对象的 % 操作被递归强制转换为 float64

请参阅 enhancing performance 文档以了解更多详细信息。

示例

>>> 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