python - 如何保存不同文件中特定列的总和
问题描述
我已经编写了一个代码(感谢),它将我需要保持原样的列和目标列的总和分组:
import pandas as pd
import glob as glob
import numpy as np
#Read excel and Create DF
all_data = pd.DataFrame()
for f in glob.glob(r'C:\Users\Sarah\Desktop\IDPMosul\Data\2014\09\*.xlsx'):
df = pd.read_excel(f,index_col=None, na_values=['NA'])
df['filename'] = f
data = all_data.append(df,ignore_index=True)
#Group and Sum
result = data.groupby(["Date"])["Families","Individuals"].agg([np.sum])
#Save file
file_name = r'C:\Users\Sarah\Desktop\U2014.csv'
result.to_csv(file_name, index=True)
问题在这里:
#Save file
file_name = r'C:\Users\Sarah\Desktop\U2014.csv'
result.to_csv(file_name, index=True)
代码给了我想要的结果但是它只考虑了它迭代的最后一个文件,我需要保存来自不同文件的所有总和谢谢
解决方案
只是你永远不会改变all_data
循环,因为它永远不会重新分配。每个循环迭代都附加到在循环外初始化的空数据帧。所以只保留最后一个文件。快速(非推荐)修复包括:
all_data = pd.DataFrame()
for f in glob.glob(r'C:\Users\Sarah\Desktop\IDPMosul\Data\2014\09\*.xlsx'):
...
all_data = all_data.append(df, ignore_index=True) # CHANGE LAST LINE IN LOOP
# USE all_data (NOT data) aggregation
result = all_data.groupby(...)
但是,请重新考虑在循环内增长数据框。正如@unutbu 警告我们的那样:永远不要在 for 循环中调用DataFrame.append
或调用。pd.concat
它导致二次复制。相反,推荐的版本是构建一个数据帧列表,以便在循环外连接一次,您可以使用列表理解来执行此操作,即使assign
对于filename:
# BUILD LIST OF DFs
df_list = [(pd.read_excel(f, index_col=None, na_values=['NA'])
.assign(filename = f)
) for f in glob.glob(r'C:\Users\Sarah\Desktop\IDPMosul\Data\2014\09\*.xlsx')]
# CONCATENATE ALL DFs
data = pd.concat(df_list, ignore_index=True)
# AGGREGATE DATA
result = data.groupby(["Date"])["Families", "Individuals"].agg([np.sum])
file_name = r'C:\Users\Sarah\Desktop\U2014.csv'
result.to_csv(file_name, index=True)
推荐阅读
- excel - 当单元格值发生变化时,总计加一
- android - Android 12 - Obsufaction 导致动画模糊
- c - c语言设置gtk的问题
- scala - 在 intellij IDE 中遇到 sparksession 错误 - 原因:java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession - sbt with scala
- ios - Xamarin ios webview:发送自定义导航事件
- javascript - 基于多个逗号分隔值过滤表数据
- sql - 如果使用 try catch 块,我可以删除开始结束语句吗
- javascript - 在Node JS中返回响应后停止执行代码?
- javascript - 密码状态迟到了一个字符的反应
- javascript - 使用 JavaScript 显示用户图像以使用 html2canvas 从 blob 转换为图像进行保存