引言
在日常数据处理中,合并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 pd
all_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文件的合并,并根据具体需求选择最合适的工具。
到此这篇关于python合并两个excel文件的两种主流方法的文章就介绍到这了,更多相关python合并excel文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论