pandas.DataFrame.eval#

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

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

警告

此方法可以运行任意代码,如果您将用户输入传递给此函数,可能会使您容易受到代码注入的攻击。

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

参数:
exprstr

要计算的表达式字符串。

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

您可以通过将不是有效 Python 变量名的列名用反引号括起来来引用它们。因此,包含空格或标点符号(下划线除外)或以数字开头的列名必须用反引号括起来。(例如,名为“Area (cm^2)”的列将引用为 `Area (cm^2)`)。Python 关键字(如“if”、“for”、“import”等)的列名不能使用。

例如,如果您的一个列名为 a a,并且您想将其与 b 相加,您的查询应该是 `a a` + b

有关表达式字符串中支持的操作和函数的完整详细信息,请参阅 eval() 的文档。

inplacebool, default False

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

**kwargs

有关 eval() 接受的关键字参数的完整详细信息,请参阅 eval() 的文档。

返回:
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
dtype: int64

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

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