熊猫.评估#
- 熊猫。eval ( expr ,解析器= 'pandas' ,引擎= None , local_dict = None , global_dict = None ,解析器= () , level = 0 , target = None , inplace = False ) [来源] #
使用各种后端将 Python 表达式作为字符串求值。
支持以下算术运算:
+
、-
、*
、/
、**
、%
、//
(仅限 python 引擎)以及以下布尔运算:|
(or)、&
(and) 和~
(not)。此外,'pandas'
解析器允许使用and
、or
、 和 ,not
其语义与相应的按位运算符相同。对象Series
的DataFrame
支持和行为与普通的 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.columns
DataFrame
- 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