月底赶报表的小伙伴举个手🙋
十几份部门数据要合并,空格、乱码、重复行要挨个清理,算完汇总还要做透视表,熬到深夜还容易出错。
今天就教你用Python自动化搞定全流程,看完就能直接用。
🔧 一、准备工作
只需要安装两个第三方库,一行命令就能搞定:
pip install pandas openpyxl
其中 pandas 负责数据处理,openpyxl 负责读写Excel文件,兼容xlsx/xlsm/xltx/xltm全格式。
💡 提示:如果是旧版xls格式,额外安装xlrd即可:pip install xlrd==1.2.0
📝 二、三步实现全流程自动化
✅ 第一步:批量合并同文件夹下所有Excel
首先把所有待处理的Excel放到同一个文件夹,代码会自动识别并合并所有Sheet:
import osimport pandas as pdexcel_dir = "./报表数据/"data_list = []# 先判断文件夹是否存在,避免报错if not os.path.exists(excel_dir): raise FileNotFoundError(f"目录不存在:{excel_dir}")# 遍历目录文件for filename in os.listdir(excel_dir): if filename.lower().endswith((".xlsx", ".xls")): file_path = os.path.join(excel_dir, filename) sheets = pd.read_excel(file_path, sheet_name=None) data_list.extend(sheets.values())# 防止无Excel文件时报concat空列表错误if data_list: total_df = pd.concat(data_list, ignore_index=True)else: raise ValueError("指定目录下未找到任何Excel文件")
几十份文件几秒钟就合并完,完全不用手动复制。
✅ 第二步:一键清洗脏数据
最头疼的去重、补空、格式修正,几行代码就能搞定:
# 1. 删除完全重复的行 total_df = total_df.drop_duplicates() # 2. 数值列空值填充为0,文本列空值填充为"未填写" num_cols = ["销售额", "成本", "利润"] text_cols = ["部门", "负责人", "区域"] total_df[num_cols] = total_df[num_cols].fillna(0) total_df[text_cols] = total_df[text_cols].fillna("未填写") # 3. 去除文本前后空格 total_df[text_cols] = total_df[text_cols].apply(lambda x: x.str.strip())
还可以根据自己的业务需求,加自定义过滤规则,比如删除异常值、统一日期格式等等。
✅ 第三步:自动统计生成结果
按维度汇总数据,直接生成透视表输出到新Excel:
以下代码主要含义:先按「部门 + 区域」分组,分别统计每组的销售总额、平均利润、订单笔数,生成一张汇总表,导出到 Excel 文件并打印完成提示。
# 按部门+区域统计汇总 result = total_df.groupby(["部门", "区域"]).agg( 总销售额=("销售额", "sum"), 平均利润=("利润", "mean"), 订单数量=("订单号", "count") ).reset_index() # 导出结果到Excel result.to_excel("./汇总结果.xlsx", index=False) print("处理完成!结果已保存到汇总结果.xlsx")
打开导出的文件就是整理好的最终报表,直接可以用。
📌 常见问题解决
- 如果Excel有合并单元格:读取时加参数
pd.read_excel(..., keep_default_na=False) 再单独处理 - 处理超大文件:加
chunksize=10000 分块读取,避免内存不足 - 需要生成带格式的报表:搭配
openpyxl 可以自定义单元格颜色、字体、边框
今天的代码大家可以直接复制,把列名换成自己的就能运行。
如果你有其他想实现的自动化场景,欢迎在评论区留言~
觉得有用的话点个赞和在看,下次给大家继续分享相关知识。