Pandas 从Pandas公式中动态评估表达式
在本文中,我们将介绍如何在Pandas中使用公式来动态评估表达式。
阅读更多:Pandas 教程
什么是Pandas公式
Pandas公式是一种将数据帧的列作为变量的公式语言。它遵循Excel公式的惯例,例如使用列名而不是变量名称。Pandas公式可以使用算术、函数和关系运算符,甚至可以使用一些短语和词组。
例如,假设我们有一个名为df的数据帧,其中包含两列“A”和“B”。 我们可以使用“+”算术运算符创建一个新列“C”,该列将包含“A”和“B”的总和:
df["C"] = df["A"] + df["B"]
但是通过Pandas公式,我们可以使用以下公式来执行相同的操作:
df.eval("C = A + B", inplace=True)
动态评估表达式
除了固定的公式之外,Pandas还支持从字符串中动态评估表达式。这种表达式可以由用户输入或从外部文件中读取。
例如,假设我们有一个包含计算公式的字符串:
formula = "C = (A + B) / 2"
我们可以使用Pandas eval()方法将该字符串作为表达式评估并创建一个新列“C”:
df.eval(formula, inplace=True)
请注意,字符串必须符合Pandas公式的规则,否则将引发SyntaxError。
示例说明
为了更好地理解如何动态评估表达式,让我们看一个简单的示例。
假设我们有一个包含销售数据的数据帧,其中包含三列:日期、区域和销售额。我们想要创建一个新列“增长率”,该列将显示该区域前一周销售额和该周销售额之间的增长率。
我们可以使用以下步骤实现:
- 将数据帧按区域进行分组。
- 将每个区域的数据帧按日期排序。
- 使用shift()方法创建一个新列“销售额前一周”,该列将包含前一周的销售额。
- 计算“增长率”列,并将其添加到数据帧中。
以下是实现这个过程的完整代码:
import pandas as pd
# 创建数据帧
data = {'date': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.Timestamp('2022-01-03'), pd.Timestamp('2022-01-04'),
pd.Timestamp('2022-01-05'), pd.Timestamp('2022-01-06'), pd.Timestamp('2022-01-07'), pd.Timestamp('2022-01-08')],
'region': ['East', 'East', 'East', 'West', 'West', 'West', 'South', 'South'],
'sales': [100, 120, 130, 200, 220, 190, 70, 90]}
df = pd.DataFrame(data)
# 分组、排序和计算销售额前一周
df["sales_last_week"] = df.groupby("region")["sales"].shift(1)
# 动态评估表达式并添加新列
formula = "growth_rate = (sales - sales_last_week) / sales_last_week"
df.eval(formula, inplace=True)
# 显示结果
print(df)
输出:
date region sales sales_last_week growth_rate
0 2022-01-01 East 100 NaN NaN
1 2022-01-02 East 120 100.0 0.200000
2 2022-01-03 East 130 120.0 0.083333
3 2022-01-04 West 200 NaN NaN
4 2022-01-05 West 220 200.0 0.100000
5 2022-01-06 West 190 220.0 -0.136364
6 2022-01-07 South 70 NaN NaN
7 2022-01-08 South 90 70.0 0.285714
我们可以看到,新的“增长率”列按我们的预期进行计算并添加到数据帧中。
总结
使用Pandas公式可以方便地创建和操作数据帧列。与固定公式不同,动态评估表达式允许我们从外部源读取表达式并使用它们来动态计算新列。要使用动态表达式,请确保字符串符合Pandas公式的语法和规则,并使用eval()方法将其评估。
极客教程