maxframe.dataframe.eval#
- maxframe.dataframe.eval(expr, parser='maxframe', engine=None, local_dict=None, global_dict=None, resolvers=(), level=0, target=None, inplace=False)#
使用各种后端将 Python 表达式作为字符串进行求值。
支持以下算术运算:
+、-、*、/、**、%、//``(仅限 Python 引擎),以及以下布尔运算:``|``(或)、``&``(与)和 ``~``(非)。此外,'pandas'`` 解析器允许使用and、or和not,其语义与相应的位运算符相同。支持Series和DataFrame对象,并且它们的行为与普通的 Python 求值方式一致。- 参数:
local_dict (dict or None, optional) -- 本地变量的字典,默认从 locals() 获取。
global_dict (dict or None, optional) -- 全局变量的字典,默认从 globals() 获取。
resolvers (list of dict-like or None, optional) -- 一个实现
__getitem__特殊方法的对象列表,您可以使用它注入额外的命名空间集合以用于变量查找。例如,在query()方法中,会注入DataFrame.index和DataFrame.columns变量,它们分别引用其对应的DataFrame实例属性。level (int, optional) -- 要遍历并添加到当前作用域的先前堆栈帧数量。大多数用户 不需要 更改此参数。
target (object, optional, default None) -- 这是赋值的目标对象。当表达式中存在变量赋值时使用。如果这样,那么 target 必须支持使用字符串键进行项赋值,如果返回的是副本,则还必须支持 .copy()。
inplace (bool, default False) -- 如果提供了 target,并且表达式修改了 target,是否就地修改 target。否则,返回一个带有修改的 target 副本。
- 返回类型:
- 抛出:
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 maxframe.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