首页 >后端开发 >Python教程 >如何使用 pd.eval 动态评估 Pandas 中公式的表达式?

如何使用 pd.eval 动态评估 Pandas 中公式的表达式?

Barbara Streisand
Barbara Streisand原创
2024-11-25 02:31:13789浏览

How to Dynamically Evaluate Expressions from Formulas in Pandas using pd.eval?

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

使用 pd.eval 对一个或多个数据帧列上的算术表达式进行计算是一项常见任务,尤其是在自动化时工作流程。考虑以下代码片段:

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

此代码通过对 df1 中的 A 列和 B 列执行操作并将结果乘以变量 x,将新列 D 添加到 df2。目标是动态重复此数据操作,利用 pd.eval 将表达式作为字符串执行的能力。

首先,让我们介绍输入 DataFrame:

import pandas as pd
import numpy as np

np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))

df1

   A  B  C  D
0  5  0  3  3
1  7  9  3  5
2  2  4  7  6
3  8  8  1  6
4  7  7  8  1

df2

   A  B  C  D
0  5  9  8  9
1  4  3  0  3
2  5  0  2  3
3  8  1  3  3
4  3  7  0  1

使用动态评估表达式pd.eval,可以使用以下代码:

result = pd.eval('df1.A (df1.B * x)')

这行代码创建一个名为 result 的新 DataFrame,其中包含计算后的表达式。 eval函数还可以用来进行条件求值,如:

pd.eval('df1.A > df2.A')

将表达式的结果赋值回来对于 df2,请使用以下语法:

df2['D'] = pd.eval('df1.A (df1.B * x)', target=df2)

要在表达式字符串内传递参数,请使用 @ 符号:

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

为了获得最佳性能,请考虑以下事项参数:

parser='python' 用于控制语法规则并确保与 Python 运算符优先级的一致性。
engine='numexpr' 用于使用优化的 numexpr 后端进行更快的评估。
这应该为您提供全面了解如何使用 pd.eval 从 Pandas 中的公式动态计算表达式。

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

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