pandas.DataFrame.eval#

DataFrame.eval(expr, *, inplace=False, **kwargs)[源代码][源代码]#

评估一个描述对 DataFrame 列进行操作的字符串。

仅对列进行操作,不对特定的行或元素进行操作。这允许 eval 运行任意代码,如果你将用户输入传递给此函数,可能会使你容易受到代码注入的攻击。

参数:
exprstr

要评估的表达式字符串。

你可以通过在变量前加上 ‘@’ 字符来引用环境中的变量,例如 @a + b

你可以通过用反引号 ` 包围它们来引用不是有效 Python 变量名的列名。

inplace布尔值, 默认为 False

如果表达式包含一个赋值,是否就地执行操作并改变现有的 DataFrame。否则,将返回一个新的 DataFrame。

**kwargs

请参阅 eval() 的文档以获取有关 query() 接受的键值参数的完整详细信息。

返回:
ndarray, 标量, pandas 对象, 或 None

如果 inplace=True,则评估结果或 None。

参见

DataFrame.query

评估一个布尔表达式以查询帧的列。

DataFrame.assign

可以评估表达式或函数以创建列的新值。

eval

使用各种后端评估作为字符串的Python表达式。

备注

更多详情请参见 eval() 的 API 文档。有关详细示例,请参见 使用 eval 提升性能

例子

>>> df = pd.DataFrame(
...     {"A": range(1, 6), "B": range(10, 0, -2), "C&C": range(10, 5, -1)}
... )
>>> df
   A   B  C&C
0  1  10   10
1  2   8    9
2  3   6    8
3  4   4    7
4  5   2    6
>>> df.eval("A + B")
0    11
1    10
2     9
3     8
4     7
dtype: int64

虽然默认情况下原始 DataFrame 不会被修改,但赋值是允许的。

>>> df.eval("D = A + B")
   A   B  C&C   D
0  1  10   10  11
1  2   8    9  10
2  3   6    8   9
3  4   4    7   8
4  5   2    6   7
>>> df
   A   B  C&C
0  1  10   10
1  2   8    9
2  3   6    8
3  4   4    7
4  5   2    6

可以使用多行表达式分配多个列:

>>> df.eval(
...     '''
... D = A + B
... E = A - B
... '''
... )
   A   B  C&C   D  E
0  1  10   10  11 -9
1  2   8    9  10 -6
2  3   6    8   9 -3
3  4   4    7   8  0
4  5   2    6   7  3

对于名称中包含空格的列,可以使用反引号引用。

>>> df.eval("B * `C&C`")
0    100
1     72
2     48
3     28
4     12

局部变量应使用 @ 字符在名称前显式引用:

>>> local_var = 2
>>> df.eval("@local_var * A")
0     2
1     4
2     6
3     8
4    10