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,其语义与相应的按位运算符相同。Series和DataFrame对象是支持的,并表现得就像它们在普通的Python评估中一样。- Parameters
local_dict (dict 或 None, 可选) – 一个本地变量的字典,默认由 locals() 获取。
global_dict (dict 或 None, 可选) – 一个全局变量字典,默认从 globals() 获取。
resolvers (列表 of 字典类 或 无, 可选) – 一组实现
__getitem__特殊方法的对象的列表,您可以使用它来注入一个额外的命名空间集合,以用于变量查找。例如,这在query()方法中用于注入DataFrame.index和DataFrame.columns变量,这些变量分别引用其各自的DataFrame实例属性。level (int, 可选) – 要遍历并添加到当前作用域的先前堆栈帧的数量。大多数用户不需要更改此参数。
target (object, optional, default None) – 这是用于赋值的目标对象。当表达式中有变量赋值时使用。如果是这样,那么target必须支持带字符串键的项赋值,并且如果返回的是副本,它还必须支持.copy()。
inplace (bool, 默认值为 False) – 如果提供了 target,并且表达式改变了 target,是否 要就地修改 target。否则,返回一个包含 变更的 target 的副本。
- Return type
- 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