如何快速将CSV格式日消耗报表转换为月度消耗报表
大体积日消耗CSV转月度消耗报表落地方案
核心处理逻辑很明确:将date字段统一规整为「年-月」统计维度,按Material-Code(物料编码)、Material(物料名称)、年月维度分组,对daily consumption(日消耗)字段求和,就能得到对应物料的月度消耗数据。针对不同数据规模和使用习惯,可以选下面三种实测跑大文件不卡的方案:
方案1:无代码方案(适合100万行以内、不想写代码的场景)
不要直接双击用原生Excel打开大体积CSV,很容易卡崩、丢行,用Excel自带的Power Query处理即可:
- 打开Excel,顶部菜单栏选「数据」-「从文本/CSV」,选中你的日消耗报表文件,加载到Power Query编辑器
- 选中
date列,把列类型改成「日期」,再新增自定义列,用日期提取函数生成格式为YYYY-MM的「统计月份」字段 - 点击「分组依据」,分组字段勾选
Material-Code、Material、「统计月份」三个字段,聚合规则选择对daily consumption列求和,把聚合后的新列命名为monthly consumption - 处理完成后直接把结果导出为新的CSV文件即可,全程是流式加载计算,不会把全量数据堆在内存里,比在单元格里写公式快几十倍。
方案2:轻量脚本方案(适合百万行以上、追求处理速度的场景)
用Python的pandas库写几行简单脚本就能跑,普通家用电脑处理1000万行级别的CSV也就10秒左右,代码可以直接复用:
import pandas as pd # 读取源文件,指定字段类型避免格式错误 df = pd.read_csv( "你的日消耗报表文件路径.csv", parse_dates=["date"], dtype={"Material-Code": str} # 物料编码存为字符串,避免长编码被转成科学计数法 ) # 生成年月统计维度 df["stat_month"] = df["date"].dt.strftime("%Y-%m") # 分组计算月度消耗 monthly_result = df.groupby( ["Material-Code", "Material", "stat_month"], as_index=False )["daily consumption"].sum().rename(columns={"daily consumption": "monthly consumption"}) # 导出结果,utf-8-sig编码保证Excel打开不乱码 monthly_result.to_csv("月度消耗报表.csv", index=False, encoding="utf-8-sig")
如果文件大到超过电脑内存,把pandas换成dask库,代码逻辑几乎不用改,就能实现分块读取计算,不会出现内存不足报错。
方案3:数据库方案(适合千万行以上、需要反复做同类统计的场景)
如果后续每个月都要做这类消耗统计,可以直接把CSV导入本地SQLite数据库,一条SQL就能出结果,后续更新源数据后重跑语句就行,数据量再大也稳定:
SELECT "Material-Code", Material, strftime('%Y-%m', date) AS stat_month, SUM("daily consumption") AS "monthly consumption" FROM daily_consumption_table GROUP BY "Material-Code", Material, strftime('%Y-%m', date);
把查询结果导出为CSV就得到最终的月度报表。
处理前务必备份原始CSV文件,避免操作失误损坏源数据
内容的提问来源于stack exchange,提问作者zDroid
相关产品推荐
相关产品推荐

