如何动态评估 Pandas DataFrame 中的算术表达式?

Linda Hamilton
发布: 2024-11-17 12:37:02
原创
793 人浏览过

How can I dynamically evaluate arithmetic expressions within Pandas DataFrames?

使用 Pandas 动态计算公式中的表达式

问题:

使用以下函数计算算术表达式pd.eval 同时考虑变量、运算符优先级和数据帧的复杂结构。

答案:

1。使用 pd.eval

pd.eval(
    "df1.A + (df1.B * x)",
    local_dict={"x": 5},
    target=df2,
    parser="python",
    engine="numexpr",
)
登录后复制

参数:

  • 表达式: 作为字符串求值的公式。
  • local_dict: 包含未在全局命名空间中定义的变量的字典。
  • target: 将结果分配给的数据帧。
  • parser: 指定用于解析表达式的解析器(pandas 或 python)。
  • engine: 指定用于计算表达式的后端(numexpr 或 python) ).

2.使用 df.eval

df1.eval(
    "A + (B * @x)",
    target=df2,
    parser="python",
    engine="numexpr",
)
登录后复制

参数:

  • df:正在评估表达式的数据帧。
  • 表达式:作为字符串求值的公式。
  • 目标:将结果分配给的数据帧。
  • 解析器:指定用于解析表达式的解析器(pandas 或 python)。
  • engine:指定用于计算表达式的后端(numexpr 或 python)。

3. pd.eval 和 df.eval 之间的差异

  • pd.eval 计算任何对象上的表达式,而 df.eval 专门计算数据帧上的表达式。
  • df.eval 需要在列名称前添加 at 符号 (@) 以避免混淆,而 pd.eval 则不然。
  • df.eval 可以处理带有赋值的多行表达式,而 pd.eval 则不能。

附加说明:

  • 确保表达式用双引号括起来。
  • x = 5 将值 5 分配给全局命名空间中的变量 x .
  • 在处理 Python 的运算符优先级规则和复杂表达式时,建议使用 parser='python'。
  • target=df2 确保将结果分配给指定的数据帧。
  • engine='numexpr' 利用优化的 numexpr 引擎来提高性能。
  • inplace=True 可用于就地修改原始数据帧。
  • df.query 也可用于条件表达式,返回满足指定条件的行。

以上是如何动态评估 Pandas DataFrame 中的算术表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板