Python如何合并两个Excel文件
引言
在日常数据处理中,合并Excel文件是常见需求。Python提供了多种库(如pandas
、openpyxl
)来实现这一操作。本文将详细介绍两种主流方法,并附上完整代码示例,帮助您高效完成Excel合并任务。
方法一:使用pandas库(推荐)
简介
pandas
是Python中处理表格数据的核心库,支持快速读取、合并和保存Excel文件。适用于纵向合并(追加数据)和横向合并(按列拼接)。
安装
pip install pandas openpyxl xlrd
场景1:纵向合并(追加数据)
示例数据
假设有两个Excel文件file1.xlsx
和file2.xlsx
,结构如下:
file1.xlsx
Name | Age | City |
---|---|---|
Alice | 25 | New York |
Bob | 30 | London |
file2.xlsx
Name | Age | City |
---|---|---|
Charlie | 28 | Paris |
David | 35 | Berlin |
代码示例
import pandas as pd# 读取两个Excel文件
df1 = pd.read_excel('file1.xlsx')
df2 = pd.read_excel('file2.xlsx')# 纵向合并(按行追加)
combined_df = pd.concat([df1, df2], ignore_index=True)# 保存为新文件
combined_df.to_excel('combined.xlsx', index=False)print("纵向合并完成!")
输出结果
Name | Age | City |
---|---|---|
Alice | 25 | New York |
Bob | 30 | London |
Charlie | 28 | Paris |
David | 35 | Berlin |
场景2:横向合并(按列拼接)
示例数据
假设file1.xlsx
包含用户信息,file2.xlsx
包含订单数据,需按用户ID合并:
file1.xlsx
UserID | Name |
---|---|
1 | Alice |
2 | Bob |
file2.xlsx
UserID | Order |
---|---|
1 | Book |
2 | Laptop |
代码示例
import pandas as pd# 读取两个Excel文件
df1 = pd.read_excel('file1.xlsx')
df2 = pd.read_excel('file2.xlsx')# 按UserID列横向合并
merged_df = pd.merge(df1, df2, on='UserID', how='inner')# 保存为新文件
merged_df.to_excel('merged.xlsx', index=False)print("横向合并完成!")
输出结果
UserID | Name | Order |
---|---|---|
1 | Alice | Book |
2 | Bob | Laptop |
注意事项
- 列名一致性:纵向合并时,确保两个文件的列名完全一致(包括大小写和空格)。
- 索引处理:使用
ignore_index=True
重置合并后的索引。 - 去重操作:合并后可通过
drop_duplicates()
去除重复行。 - 内存优化:处理大型文件时,可分块读取(
chunksize
参数)。
方法二:使用openpyxl库(保留格式)
简介
openpyxl
可直接操作Excel文件,支持保留原始格式(如字体、颜色),但代码稍复杂。适用于需要保留样式的场景。
安装
pip install openpyxl
代码示例(纵向合并)
from openpyxl import Workbook, load_workbook# 加载第一个Excel文件
wb1 = load_workbook('file1.xlsx')
ws1 = wb1.active# 加载第二个Excel文件
wb2 = load_workbook('file2.xlsx')
ws2 = wb2.active# 创建新工作簿
new_wb = Workbook()
new_ws = new_wb.active# 复制第一个文件的所有行
for row in ws1.iter_rows(values_only=True):new_ws.append(row)# 复制第二个文件的所有行(跳过标题行)
for row in ws2.iter_rows(min_row=2, values_only=True):new_ws.append(row)# 保存新文件
new_wb.save('combined_openpyxl.xlsx')print("使用openpyxl合并完成!")
优势与局限
- 优势:保留原始格式(如颜色、边框)。
- 局限:代码复杂度高,不支持横向合并。
方案对比
方法 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
pandas | 快速合并、数据清洗、横向/纵向合并 | 代码简洁、支持大数据量 | 无法保留格式 |
openpyxl | 保留Excel样式、操作工作表结构 | 格式完全保留 | 代码复杂、性能较低 |
常见问题解答
1. 如何合并多个Excel文件?
使用pandas
可循环读取多个文件:
import pandas as pdall_dfs = []
for file in ['file1.xlsx', 'file2.xlsx', 'file3.xlsx']:df = pd.read_excel(file)all_dfs.append(df)combined = pd.concat(all_dfs, ignore_index=True)
2. 合并时如何指定工作表?
使用sheet_name
参数:
df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
3. 如何处理合并后的空值?
使用dropna()
去除空行:
combined_df.dropna(inplace=True)
总结
- 推荐方案:
- 数据清洗优先:选择
pandas
库,支持灵活的合并和清洗操作。 - 保留格式优先:使用
openpyxl
库,但仅适用于简单纵向合并。
- 数据清洗优先:选择
通过本文的两种方法,您可以轻松实现Excel文件的合并,并根据具体需求选择最合适的工具。