大家好,我是你们的Python办公助手,今天咱们来聊聊办公中最常见的痛点——合并Excel文件。
你是不是经常收到一堆来自不同部门、不同时间段的Excel表格,需要把它们汇总成一个总表?手动复制粘贴几百行数据,不仅耗时,还容易出错。别担心,今天教你用Python几行代码搞定,以后遇到合并任务,喝杯咖啡的功夫就完成了!
---
一、准备工作
1. 安装Python和必要的库
如果你还没安装Python,可以先去官网下载安装(建议3.7以上版本)。安装时记得勾选“Add Python to PATH”。
然后打开命令提示符(或终端),输入以下命令安装需要用到的库:
```bash
pip install pandas openpyxl
```
· pandas:强大的数据处理库,专门处理表格数据。
· openpyxl:让Python读写Excel文件的引擎。
2. 准备测试文件
为了演示,我在桌面创建一个名为“销售数据”的文件夹,里面放三个Excel文件:
· 1月销售.xlsx
· 2月销售.xlsx
· 3月销售.xlsx
每个文件的结构相同,都有“姓名”、“销售额”、“日期”三列。现在我们要把它们合并成一个“一季度销售汇总.xlsx”。
---
二、一步步写代码
第1步:导入库
新建一个Python文件(比如merge_excel.py),用记事本或VS Code打开,输入:
```python
import pandas as pd
import glob
import os
```
· pandas:用来读取和合并数据。
· glob:用来查找符合规则的文件路径。
· os:处理文件路径(虽然本例中可以不用,但留着备用)。
第2步:获取所有Excel文件的路径
使用glob.glob可以匹配所有.xlsx文件:
```python
# 替换成你的文件夹路径
folder_path = r'C:\Users\你的用户名\Desktop\销售数据'
file_pattern = os.path.join(folder_path, '*.xlsx')
files = glob.glob(file_pattern)
print("找到以下文件:")
for f in files:
print(f)
```
运行一下,如果看到三个文件的路径,说明成功。
第3步:循环读取每个文件,存入列表
```python
data_frames = [] # 用来存放每个文件的数据框
for file in files:
df = pd.read_excel(file) # 读取Excel文件
data_frames.append(df) # 添加到列表
print(f"已读取:{file},共{len(df)}行")
```
第4步:合并所有数据框
```python
merged_df = pd.concat(data_frames, ignore_index=True)
```
ignore_index=True表示重新生成行索引,避免原来的索引重复。
第5步:保存合并后的数据
```python
output_path = os.path.join(folder_path, '一季度销售汇总.xlsx')
merged_df.to_excel(output_path, index=False)
print(f"合并完成!共{len(merged_df)}行数据,已保存到:{output_path}")
```
完整代码
把上面几步拼起来,就是完整的合并脚本:
```python
import pandas as pd
import glob
import os
# 设置文件夹路径(修改为你的实际路径)
folder_path = r'C:\Users\你的用户名\Desktop\销售数据'
file_pattern = os.path.join(folder_path, '*.xlsx')
files = glob.glob(file_pattern)
data_frames = []
for file in files:
df = pd.read_excel(file)
data_frames.append(df)
print(f"已读取:{file},共{len(df)}行")
if data_frames:
merged_df = pd.concat(data_frames, ignore_index=True)
output_path = os.path.join(folder_path, '一季度销售汇总.xlsx')
merged_df.to_excel(output_path, index=False)
print(f"合并完成!共{len(merged_df)}行数据,已保存到:{output_path}")
else:
print("未找到任何Excel文件。")
```
---
三、运行看看效果
把代码中的文件夹路径改成你自己的,然后运行脚本。你会看到类似下面的输出:
```
已读取:C:\Users\xxx\Desktop\销售数据\1月销售.xlsx,共10行
已读取:C:\Users\xxx\Desktop\销售数据\2月销售.xlsx,共12行
已读取:C:\Users\xxx\Desktop\销售数据\3月销售.xlsx,共8行
合并完成!共30行数据,已保存到:C:\Users\xxx\Desktop\销售数据\一季度销售汇总.xlsx
```
打开生成的汇总文件,所有数据整整齐齐地合并在一起,完美!
---
四、进阶技巧
1. 只合并指定列
如果每个文件的列名不完全相同,但你需要提取某些列,可以在读取时指定:
```python
df = pd.read_excel(file, usecols=['姓名', '销售额'])
```
2. 添加文件名来源列
有时需要知道每条数据来自哪个文件,可以在读取时增加一列:
```python
df['来源文件'] = os.path.basename(file)
```
3. 合并同一个Excel文件中的多个工作表
如果是要合并同一个文件里的多个sheet,可以用pd.read_excel(file, sheet_name=None)读取所有sheet,然后循环合并。
4. 按行合并 vs 按列合并
· 按行合并(上下堆叠):pd.concat([df1, df2], axis=0)(默认)
· 按列合并(左右拼接):pd.concat([df1, df2], axis=1)
如果两个表有共同的键(如员工ID),还可以用merge进行关联合并,这个以后我们再讲。
---
五、总结
今天我们用短短十几行代码,实现了Excel文件的批量合并,告别了手动复制粘贴的繁琐。代码的核心就是glob查找文件 + pandas读取/合并/保存,是不是超级简单?
如果你经常需要处理类似的任务,不妨把这个脚本保存起来,下次直接运行,工作效率瞬间提升!试着修改代码,处理你自己的文件吧。
如果你觉得有用,欢迎点赞、在看、分享给更多小伙伴。下期我们讲讲如何用Python批量拆分Excel文件(比如按部门拆分成多个表格),敬请期待!
---
互动话题:你在办公中遇到过哪些重复性的Excel操作?留言告诉我,说不定下一篇文章就帮你解决!
---
以上就是今天的全部内容,我是你的Python办公助手,我们下期见!