当前位置:首页>python>Day12:数据"连连看"!用Python一键合并12个月的工作总结

Day12:数据"连连看"!用Python一键合并12个月的工作总结

  • 2026-08-25 11:12:11
Day12:数据"连连看"!用Python一键合并12个月的工作总结

还在手动复制粘贴12个Excel文件?Python一行代码帮你合成一张年表!

一、先看这个真实痛点

刘主任每个季度末都要做这件事:

  1. 有3个年级组交来的Excel文件
  2. 有12个月的月度工作总结
  3. 有5个部门的年度数据报表

以前他得:

  1. 打开年级1数据.xlsx,全选→复制 ✓
  2. 打开年级2数据.xlsx,全选→复制 ✓
  3. 打开年级3数据.xlsx,全选→复制 ✓
  4. 新建总表.xlsx,粘贴→保存 ✓

3个文件还能忍,如果是12个月的文件呢?30个班级的数据呢?

二、Python的"合并魔法"

今天教你4行代码,合并任意多个Excel文件:

import pandas as pdimport os# 1. 读取文件夹里所有的Excel文件文件夹 = '各月工作总结'所有文件 = [f for f in os.listdir(文件夹) if f.endswith('.xlsx')]# 2. 魔法开始!合并所有文件合并数据 = pd.concat([pd.read_excel(f'{文件夹}/{文件}') for 文件 in 所有文件])# 3. 保存结果合并数据.to_excel('全年工作总结.xlsx', index=False)print(f"✅ 搞定!已合并{len(所有文件)}个文件,共{len(合并数据)}条记录!")

看懂这个魔法了吗?

  • 不用打开每个文件
  • 不用复制粘贴
  • 3个文件和30个文件代码完全一样!

三、分解"魔法":每行代码在干什么?

3.1 第1步:找到要合并的文件

import os所有文件 = [f for f in os.listdir('各月工作总结') if f.endswith('.xlsx')]

分解理解:

  • os.listdir('各月工作总结'):列出文件夹里所有文件名
  • if f.endswith('.xlsx'):只保留.xlsx结尾的文件
  • [f for f in ...]:把符合条件的文件名放进一个列表

比如文件夹里有:1月.xlsx、2月.xlsx、3月.xlsx...

这个代码就会得到:['1月.xlsx', '2月.xlsx', '3月.xlsx', ...]

3.2 第2步:核心魔法 pd.concat()

合并数据 = pd.concat([pd.read_excel(f'{文件夹}/{文件}') for 文件 in 所有文件])

这是今天最重要的魔法!我们拆开看:

# 第一步:读取每个文件数据列表 = []for 文件 in 所有文件:    数据 = pd.read_excel(f'{文件夹}/{文件}')  # 读取一个文件    数据列表.append(数据)  # 加到列表里# 第二步:合并所有数据合并数据 = pd.concat(数据列表)  # 这才是魔法!

pd.concat() 的神奇之处:

  • 它能合并任意多个表格
  • 表格列名相同就直接合并
  • 表格列名不同会智能处理(后面讲)

3.3 第3步:保存结果

合并数据.to_excel('全年工作总结.xlsx', index=False)
  • 把合并后的数据保存为新文件
  • index=False:不保存行号(让Excel更干净)

四、自己动手试试!

4.1 第一步:创建测试数据

我们来模拟3个部门的数据:

import pandas as pd# 创建3个部门的测试数据部门1 = pd.DataFrame({'姓名': ['张三', '李四', '王五'],'部门': ['技术部', '技术部', '技术部'],'任务量': [15, 12, 18],'完成率': [95, 88, 92]})部门2 = pd.DataFrame({'姓名': ['赵六', '钱七'],'部门': ['市场部', '市场部'], '任务量': [20, 16],'完成率': [85, 90]})部门3 = pd.DataFrame({'姓名': ['孙八', '周九', '吴十'],'部门': ['行政部', '行政部', '行政部'],'任务量': [8, 10, 9],'完成率': [98, 95, 96]})print("📋 部门1数据:")print(部门1)print("\n📋 部门2数据:")  print(部门2)print("\n📋 部门3数据:")print(部门3)

运行后看到3个独立表格。

4.2 第二步:使用合并魔法

# 把3个部门数据放进一个列表所有部门 = [部门1, 部门2, 部门3]# 使用合并魔法!全公司数据 = pd.concat(所有部门)print("\n🎯 合并后的全公司数据:")print(全公司数据)print(f"\n✅ 合并成功!总计{len(全公司数据)}位员工")

运行结果:

     姓名  部门  任务量  完成率0    张三  技术部    15    951    李四  技术部    12    88  2    王五  技术部    18    920    赵六  市场部    20    851    钱七  市场部    16    900    孙八  行政部     8    981    周九  行政部    10    952    吴十  行政部     9    96

看到了吗?

  • 3个表格变成1个了 ✓
  • 所有数据都保留了 ✓
  • 部门信息也完整 ✓

只用1行 pd.concat(),完成了表格合并!

五、办公实战:合并12个月的数据

5.1 创建12个月的模拟数据

# 生成12个月的销售数据月份数据 = []for 月 in range(1, 13):    月份表 = pd.DataFrame({'月份': [f'{月}月'] * 5,  # 每月份5条记录'产品': [f'产品{i}'for i in range(1, 6)],'销售额': [100 + 月*10 + i*5 for i in range(5)]  # 模拟销售额    })    月份数据.append(月份表)# 合并全年数据全年销售 = pd.concat(月份数据)print("📅 全年销售数据(前20条):")print(全年销售.head(20))print(f"\n📊 总记录数:{len(全年销售)}条")

5.2 合并时添加标识列

# 更高级的合并:给每个文件添加来源标识部门数据 = []部门名 = ['技术部', '市场部', '行政部']for i, 部门 in enumerate([部门1, 部门2, 部门3]):    部门 = 部门.copy()  # 复制一份,避免修改原数据    部门['数据来源'] = f'{部门名[i]}_2023'# 添加标识列    部门数据.append(部门)# 合并带标识的数据标识数据 = pd.concat(部门数据)print("\n🏷️ 带数据来源标识的合并结果:")print(标识数据)

六、更多实用合并技巧

6.1 合并列名不同的表格

# 有时候表格列名不完全相同表1 = pd.DataFrame({'姓名': ['张三'], '年龄': [25]})表2 = pd.DataFrame({'姓名': ['李四'], '工龄': [3]})  # 列名不同!# 合并时如何处理?合并结果 = pd.concat([表1, 表2], sort=False)print("📋 列名不同的表格合并:")print(合并结果)print("\n说明:不同列名会变成新列,没有的值用NaN填充")

6.2 横向合并(类似Excel的VLOOKUP)

# 学生基本信息表学生信息 = pd.DataFrame({'学号': ['S001', 'S002', 'S003'],'姓名': ['小明', '小红', '小刚'],'班级': ['三(1)班', '三(1)班', '三(2)班']})# 学生成绩表  学生成绩 = pd.DataFrame({'学号': ['S001', 'S002', 'S003'],'语文': [85, 92, 78],'数学': [92, 88, 85]})# 横向合并(按学号匹配)完整信息 = pd.merge(学生信息, 学生成绩, on='学号')print("\n👥 横向合并学生信息和成绩:")print(完整信息)

pd.merge() 相当于Excel的VLOOKUP:

  • on='学号':按学号列匹配
  • 自动找到相同学号的行合并
  • 比VLOOKUP更强大!

6.3 合并文件夹里所有CSV文件

import glob  # 另一种查找文件的方法# 找到文件夹里所有CSV文件csv文件列表 = glob.glob('数据文件夹/*.csv')# 合并所有CSVcsv数据 = pd.concat([pd.read_csv(文件) for 文件 in csv文件列表])print(f"📂 已合并{len(csv文件列表)}个CSV文件")

七、重点总结:今天你学会了什么?

✅ 核心技能

  1. pd.concat([表1, 表2, 表3]) - 纵向合并多个表格
  2. pd.merge(表1, 表2, on='列名') - 横向合并(类似VLOOKUP)
  3. os.listdir('文件夹') - 获取文件夹里所有文件名
  4. glob.glob('*.csv') - 按模式查找文件

✅ 办公应用场景

  1. 合并月度报表:12个月→全年总结
  2. 合并部门数据:各部门→全公司
  3. 合并学生成绩:各班级→全年级
  4. 关联不同表格:学生信息+成绩+考勤

✅ 效率对比

任务
传统操作
Python代码
合并3个文件
打开3次+复制3次+粘贴3次
1行代码
合并12个月报
打开12次+复制12次+粘贴12次
1行代码
合并30个班级
打开30次+复制30次+粘贴30次
1行代码
关联2个表写VLOOKUP公式+下拉1行代码

八、今日挑战:动手做!

任务1:合并你的第一个表格

# 创建两个测试表格表A = pd.DataFrame({'城市': ['北京', '上海'],'人口': [2189, 2487]  # 万})表B = pd.DataFrame({'城市': ['广州', '深圳'],'人口': [1881, 1756]})# 你的任务:合并这两个表格# 在这下面写你的代码:print("合并结果:")print(合并表)

任务2:合并带标识的数据

# 创建季度数据一季度 = pd.DataFrame({'产品': ['A'], '销量': [100]})二季度 = pd.DataFrame({'产品': ['A'], '销量': [120]})# 任务:合并时添加"季度"列一季度['季度'] = 'Q1'# 示例# 二季度也添加季度标识,然后合并print("带季度的合并结果:")print(结果)

任务3(进阶):合并文件夹模拟

# 模拟创建3个文件(不用真实文件)文件1 = pd.DataFrame({'月': ['1月'], '数据': [100]})文件2 = pd.DataFrame({'月': ['2月'], '数据': [200]})文件3 = pd.DataFrame({'月': ['3月'], '数据': [300]})文件列表 = [文件1, 文件2, 文件3]# 任务:合并这三个"文件"# 提示:用pd.concat()print(f"合并了{len(文件列表)}个文件,总记录数:{len(合并结果)}")

九、明日预告

明天学数据分组统计!

  • 如何一键统计每个部门的平均分?
  • 如何自动汇总每个班级的最高分?
  • 如何分组计算每月的销售额总和?

告别分类汇总,Python分组更强大!


回复"Py-Day"查看挑战题答案和完整代码。

特别提醒:合并操作在工作中非常常用!一定要掌握!

评论区作业:分享你工作中需要合并表格的场景,或者晒出你的合并代码截图!👇

最新文章

随机文章