当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Python 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'解析器允许使用and,or, 和not与相应的位运算符具有相同的语义。pandas.Seriespandas.DataFrame对象被支持并且行为与普通的 ol' Python 评估一样。

参数

exprstr

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

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

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

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

用于评估表达式的引擎。支持的引擎是

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

  • 'numexpr' :此默认引擎使用评估 Pandas 对象

    numexpr 用于在具有大帧的复杂表达式中大幅加速。

  • 'python' :执行操作就像您在顶部有 eval 'd

    级别的Python。这个引擎通常没那么有用。

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

truediv布尔型,可选

是否使用真正的除法,例如 Python >= 3。

local_dictdict 或 None,可选

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

global_dictdict 或 None,可选

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

resolversdict-like 或无列表,可选

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

level整数,可选

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

target对象,可选,默认无

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

inplace布尔值,默认为 False

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

返回

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

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

抛出

ValueError

有很多情况可以引发这样的错误:

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

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

    a = b + 1 a + 2

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

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

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

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

注意

算术 % 操作中涉及的任何对象的 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

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.eval。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。