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