首页  >  文章  >  后端开发  >  如何使用“pd.eval”评估 Pandas 中的算术表达式?

如何使用“pd.eval”评估 Pandas 中的算术表达式?

DDD
DDD原创
2024-11-15 08:13:02165浏览

How to Evaluate Arithmetic Expressions in Pandas Using `pd.eval`?

根据 Pandas 中的公式动态计算表达式

挑战

在一个或多个 DataFrame 列上使用 pd.eval 计算算术表达式,如以下示例:

x = 5
df2['D'] = df1['A'] + (df1['B'] * x)

pd.eval 函数

pd.eval、df.eval 和 df.query 是用于计算 Pandas 中表达式的三个密切相关的函数。每个都有自己微妙的变化,但它们都遵循相似的语法规则和功能支持。

支持的功能:

  • 算术运算
  • 比较运算
  • 布尔运算
  • 列表和元组文字
  • 属性访问
  • 下标表达式
  • 简单变量评估

语法规则:

表达式必须作为字符串传递,并遵循以下准则:

  • 整个表达式是一个字符串
  • 全局命名空间中的变量通过名称引用
  • 通过属性访问器访问特定列
  • 括号可用于覆盖运算符优先级

主要区别

pd.eval 与 df.eval

  • 列访问: pd.eval 需要带有 DataFrame 索引的列名称,而 df.eval 允许直接访问列名称。
  • 带有 DataFrame 的表达式: pd.eval 更适合数据帧范围的操作,而 df.eval 对特定 DataFrame 进行操作。

df.eval与 df.query

  • 查询与评估: df.query 评估条件表达式并返回匹配的行。 df.eval 返回表达式本身的结果。
  • 方便: df.query 通常对于查询来说更加简洁。

解决方案

要使用 pd.eval 解决原始挑战:

x = 5
pd.eval("df1.A + (df1.B * x)")

重新分配

要将表达式的结果分配回 df2,请使用目标参数:

pd.eval("D = df1.A + (df1.B * x)", target=df2)

在表达式中传递参数

要将 x 作为表达式字符串中的参数传递,请使用 @ 符号:

pd.eval("df1.A + (df1.B * @x)", local_dict={'x': x})

以上是如何使用“pd.eval”评估 Pandas 中的算术表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn