mars.dataframe.DataFrame.eval#

DataFrame.eval(expr, inplace=False, **kwargs)#

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

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

Parameters
  • expr (str) – 要评估的表达式字符串。

  • inplace (bool, 默认为 False) – 如果表达式包含赋值,则是否在原地执行操作并修改现有的 DataFrame。否则,将返回一个新的 DataFrame。

  • **kwargs – 请参阅eval()的文档,以获取关于 query()接受的关键字参数的完整详细信息。

Returns

评估的结果。

Return type

ndarray、标量或pandas对象

另请参阅

DataFrame.query

评估布尔表达式以查询框架的列。

DataFrame.assign

可以评估一个表达式或函数,以为列创建新值。

eval

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

备注

有关更多详细信息,请参见eval()的API文档。有关详细示例,请参见使用eval增强性能

示例

>>> import mars.dataframe as md
>>> df = md.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)})
>>> df.execute()
   A   B
0  1  10
1  2   8
2  3   6
3  4   4
4  5   2
>>> df.eval('A + B').execute()
0    11
1    10
2     9
3     8
4     7
dtype: int64

尽管默认情况下不会修改原始 DataFrame,但允许进行赋值。

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

使用 inplace=True 来修改原始 DataFrame。

>>> df.eval('C = A + B', inplace=True)
>>> df.execute()
   A   B   C
0  1  10  11
1  2   8  10
2  3   6   9
3  4   4   8
4  5   2   7

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

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