每月报表不用愁:Pandas 把几十个 CSV 揉成一张表
【摘要】 用pandas几行代码把分散在多个csv的销售数据纵向拼接、按部门汇总,一键导出成 Excel 报表。
每到月底,运营同学最怕的一件事就是"汇报表"——各个门店、各个系统导出来的 CSV 散落一地,手工复制到一张表里既慢又容易错。其实这种活儿交给 Pandas,几行代码就能搞定。我这次就是把三十多个分店的销售 CSV 拼成一张月度汇总表,顺手记一下做法。

一、需求其实很土
每个分店每天导出一个 销售_XX店_日期.csv,字段都是 门店,商品,数量,金额。我要的是:按门店汇总总销量和总金额,导出成一张 Excel 给财务。难点不在计算,在于"文件多、字段一致但顺序可能乱"。
二、读进来再拼起来
用 glob 把目录里的 CSV 全捞出来,逐个读成 DataFrame,再 concat 纵向拼:
import pandas as pd
import glob
files = glob.glob("sales/*.csv")
dfs = [pd.read_csv(f) for f in files]
all_df = pd.concat(dfs, ignore_index=True)
print(all_df.shape) # 看一眼总共多少行
ignore_index=True 会重排索引,避免拼接后索引重复。这一步之后,所有分店的数据就躺在同一张表里了。
三、按门店汇总
汇总才是重点,用 groupby 一行搞定:
report = (
all_df
.groupby("门店", as_index=False)
.agg(总销量=("数量", "sum"), 总金额=("金额", "sum"), 订单数=("数量", "count"))
)
report = report.sort_values("总金额", ascending=False)
with pd.ExcelWriter("月度报表.xlsx") as w:
report.to_excel(w, index=False, sheet_name="按门店")
agg 里可以同时对不同列用不同聚合函数,比写多个 groupby 清爽得多。
四、几种写法的差别
| 写法 | 可读性 | 适合场景 |
|---|---|---|
pd.concat + groupby |
高 | 文件同结构、要合并后分析 |
循环逐个 df.append |
低 | 老代码兼容,不推荐 |
pd.read_csv 直接读文件夹(需第三方) |
中 | 一次性快速预览 |
绝大多数情况,第一种就够用且最稳。
一点心得
报表类任务的本质永远是"先统一结构,再按维度聚合"。Pandas 把这两步都封装得很好,真正要花心思的反而是确认每个 CSV 的字段真的一致——我曾经因为某个分店把"金额"写成"金额(元)",拼完后汇总直接少一列。读进来后先 print(all_df.columns) 看一眼列名,能省掉后面一堆麻烦。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)