mars.dataframe.eval#

mars.dataframe.eval(expr, parser='mars', engine=None, local_dict=None, global_dict=None, resolvers=(), level=0, target=None, inplace=False)#

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

支持以下算术运算: +, -, *, /, **, %, // (仅限python引擎)以及以下布尔运算: | (或), & (和),以及 ~ (非)。 此外,'pandas' 解析器允许使用 and, or,和 not,其语义与相应的按位运算符相同。 SeriesDataFrame 对象是支持的,并表现得就像它们在普通的Python评估中一样。

Parameters
  • expr (str) – 要评估的表达式。该字符串不能包含任何Python 语句,只能包含Python 表达式

  • local_dict (dictNone, 可选) – 一个本地变量的字典,默认由 locals() 获取。

  • global_dict (dictNone, 可选) – 一个全局变量字典,默认从 globals() 获取。

  • resolvers (列表 of 字典类, 可选) – 一组实现 __getitem__ 特殊方法的对象的列表,您可以使用它来注入一个额外的命名空间集合,以用于变量查找。例如,这在 query() 方法中用于注入 DataFrame.indexDataFrame.columns 变量,这些变量分别引用其各自的 DataFrame 实例属性。

  • level (int, 可选) – 要遍历并添加到当前作用域的先前堆栈帧的数量。大多数用户需要更改此参数。

  • target (object, optional, default None) – 这是用于赋值的目标对象。当表达式中有变量赋值时使用。如果是这样,那么target必须支持带字符串键的项赋值,并且如果返回的是副本,它还必须支持.copy()

  • inplace (bool, 默认值为 False) – 如果提供了 target,并且表达式改变了 target,是否 要就地修改 target。否则,返回一个包含 变更的 target 的副本。

Return type

ndarray, 数值标量, DataFrame, Series

Raises

ValueError – 这种错误可能会引发许多情况: - target=None,但表达式是多行的。 - 表达式是多行的,但并不是所有行都有项赋值。 这样的安排示例如下: a = b + 1 a + 2 在这里,存在不同的行中的表达式,使其成为多行, 但最后一行并没有将输出a + 2赋值给变量。 - inplace=True,但表达式缺少项赋值。 - 提供了项赋值,但target不支持 字符串项赋值。 - 提供了项赋值且inplace=False,但target 不支持.copy()方法。

另请参阅

DataFrame.query

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

DataFrame.eval

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

备注

任何参与算术 % 操作的对象的 dtype 都会被递归地转换为 float64

有关更多详细信息,请参见提升性能文档。

示例

>>> import mars.dataframe as md
>>> df = md.DataFrame({"animal": ["dog", "pig"], "age": [10, 20]})
>>> df.execute()
  animal  age
0    dog   10
1    pig   20

我们可以使用 pd.eval 添加一个新列:

>>> md.eval("double_age = df.age * 2", target=df).execute()
  animal  age  double_age
0    dog   10          20
1    pig   20          40