pandas.DataFrame.eval#
- DataFrame.eval(expr, *, inplace=False, **kwargs)[源代码][源代码]#
评估一个描述对 DataFrame 列进行操作的字符串。
仅对列进行操作,不对特定的行或元素进行操作。这允许 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
局部变量应使用
@
字符在名称前显式引用:>>> local_var = 2 >>> df.eval("@local_var * A") 0 2 1 4 2 6 3 8 4 10