Python如何合并两个Excel文件

引言

在日常数据处理中,合并Excel文件是常见需求。Python提供了多种库(如pandasopenpyxl)来实现这一操作。本文将详细介绍两种主流方法,并附上完整代码示例,帮助您高效完成Excel合并任务。

方法一:使用pandas库(推荐)

简介

pandas是Python中处理表格数据的核心库,支持快速读取、合并和保存Excel文件。适用于纵向合并(追加数据)横向合并(按列拼接)

安装

bash 复制代码
pip install pandas openpyxl xlrd

场景1:纵向合并(追加数据)

示例数据

假设有两个Excel文件file1.xlsxfile2.xlsx,结构如下:

file1.xlsx

Name Age City
Alice 25 New York
Bob 30 London

file2.xlsx

Name Age City
Charlie 28 Paris
David 35 Berlin
代码示例
python 复制代码
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
代码示例
python 复制代码
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

注意事项

  1. 列名一致性:纵向合并时,确保两个文件的列名完全一致(包括大小写和空格)。
  2. 索引处理 :使用ignore_index=True重置合并后的索引。
  3. 去重操作 :合并后可通过drop_duplicates()去除重复行。
  4. 内存优化 :处理大型文件时,可分块读取(chunksize参数)。

方法二:使用openpyxl库(保留格式)

简介

openpyxl可直接操作Excel文件,支持保留原始格式(如字体、颜色),但代码稍复杂。适用于需要保留样式的场景。

安装

bash 复制代码
pip install openpyxl

代码示例(纵向合并)

python 复制代码
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可循环读取多个文件:

python 复制代码
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参数:

python 复制代码
df = pd.read_excel('file.xlsx', sheet_name='Sheet2')

3. 如何处理合并后的空值?

使用dropna()去除空行:

python 复制代码
combined_df.dropna(inplace=True)

总结

  • 推荐方案
    • 数据清洗优先 :选择pandas库,支持灵活的合并和清洗操作。
    • 保留格式优先 :使用openpyxl库,但仅适用于简单纵向合并。

通过本文的两种方法,您可以轻松实现Excel文件的合并,并根据具体需求选择最合适的工具。

相关推荐
laufing几秒前
flask_restx 创建restful api
python·flask·restful
Excel工作圈27 分钟前
凭证助手一键匹配已勾选抵扣发票与全量发票明细
数据库·excel
毕设源码-郭学长44 分钟前
【开题答辩全过程】以 基于python电商商城系统为例,包含答辩的问题和答案
开发语言·python
black0moonlight44 分钟前
win11 isaacsim 5.1.0 和lab配置
python
知乎的哥廷根数学学派1 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
网安CILLE1 小时前
PHP四大输出语句
linux·开发语言·python·web安全·网络安全·系统安全·php
jjjddfvv1 小时前
超级简单启动llamafactory!
windows·python·深度学习·神经网络·微调·audiolm·llamafactory
A先生的AI之旅1 小时前
2025顶会TimeDRT快速解读
人工智能·pytorch·python·深度学习·机器学习
程序员小远1 小时前
完整的项目测试方案流程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例