Python for DF 基于 Excel 和 CSV 的不同结果 pandas Groupby

Posted

技术标签:

【中文标题】Python for DF 基于 Excel 和 CSV 的不同结果 pandas Groupby【英文标题】:Different result pandas Groupby in Python for DF based on Excel and CSV 【发布时间】:2021-11-19 19:08:13 【问题描述】:

为了使我的代码更快,我想从 Excel 输入切换到 CSV 输入数据。首先,我创建了两个完全相同的 df。

demand_data = pd.ExcelFile("Input Data\Historical Demand.xlsx")
FY20 = pd.read_excel(demand_data, 'Data FY20')
FY20b = pd.read_csv("Input Data\Historical Demand FY20.csv")

生成的 df 是: Based on ExcelBased on CSV

接下来,我想使用 pandas groupby 将我的 df 按某些列分组,并对某些列求和。我使用以下代码:

FY20 = FY20.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()
FY20b = FY20b.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()

这是结果: Result based on Excel DFResult based on CSV DF

这对我来说没有任何意义,因为两个数据帧完全相同,但结果却不是。如何从基于 CSV 的数据帧中获得相同的 groupby 结果?

【问题讨论】:

您好,欢迎您。如果您可以查看how-to-ask,然后尝试生成mcve,那就太好了。 【参考方案1】:

这可能是因为您在 CSV 中的数字是字符串(例如 1,516.0),您可以从逗号中注意到这一点。您需要删除这些,然后将生成的字符串转换为整数列:

FY20b["OrderQuantity"] = FY20b["OrderQuantity"].apply(lambda x: x.replace(',', ''))
FY20b["OrderQuantity"] = pd.to_numeric(FY20b["OrderQuantity"])

FY20b["DeliveredQuantity"] = FY20b["DeliveredQuantity"].apply(lambda x: x.replace(',', ''))
FY20b["DeliveredQuantity"] = pd.to_numeric(FY20b["DeliveredQuantity"])

那么你可以这样做:

FY20b = FY20b.groupby(['SKU', 'Material', 'Plant'])[["OrderQuantity","DeliveredQuantity"]].sum().reset_index()

【讨论】:

这正是问题所在,谢谢!

以上是关于Python for DF 基于 Excel 和 CSV 的不同结果 pandas Groupby的主要内容,如果未能解决你的问题,请参考以下文章

For Loop - 将所有 excel 选项卡读入 Panda Df

使用for循环的Python可视化

Excel+Python:分组求和

Python处理大数据的技巧, 2022-06-21

Python df.to_excel() 将数字作为文本存储在 excel 中。如何存储为价值?

pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快