Python如何合并两个Excel文件

引言

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

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

简介

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

安装

pip install pandas openpyxl xlrd

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

示例数据

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

file1.xlsx

NameAgeCity
Alice25New York
Bob30London

file2.xlsx

NameAgeCity
Charlie28Paris
David35Berlin
代码示例
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("纵向合并完成!")
输出结果
NameAgeCity
Alice25New York
Bob30London
Charlie28Paris
David35Berlin

场景2:横向合并(按列拼接)

示例数据

假设file1.xlsx包含用户信息,file2.xlsx包含订单数据,需按用户ID合并:

file1.xlsx

UserIDName
1Alice
2Bob

file2.xlsx

UserIDOrder
1Book
2Laptop
代码示例
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("横向合并完成!")
输出结果
UserIDNameOrder
1AliceBook
2BobLaptop

注意事项

  1. 列名一致性:纵向合并时,确保两个文件的列名完全一致(包括大小写和空格)。
  2. 索引处理:使用ignore_index=True重置合并后的索引。
  3. 去重操作:合并后可通过drop_duplicates()去除重复行。
  4. 内存优化:处理大型文件时,可分块读取(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文件的合并,并根据具体需求选择最合适的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94913.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL进阶】用EXPLAIN看透SQL执行计划:从“盲写“到“精准优化“

用EXPLAIN洞察SQL执行计划:从"盲目编写"到"精准优化" 很多开发者在编写SQL时仅凭直觉,直到查询超时才发现问题。MySQL内置的EXPLAIN工具能提前揭示查询执行逻辑,帮助预防性能隐患。本文将带你掌握EXPLAIN的核心用法&…

电影艺术好,电影知识得学

关于电影应该谈什么导演风格、演员技术、剧本结构、票房、政治因素等。一、纸上谈电影电影制作期:研发、前制、拍摄、后制、发行。一般成员只在某个时期出现。制片和导演会从头监督到尾。研发期: 剧本概念发想与成形的时期。创作自由度比较大&#xff0c…

FPGA学习笔记——简易的DDS信号发生器

目录 一、任务 二、分析 三、ROM IP核配置 四、Visio图 五、代码 (1).v代码 (2)仿真代码 六、仿真 七、实验现象 一、任务 用串口模块,用上位机发送指令,FPGA接收,然后输出对应的波形&…

在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏 (中)

接上篇 在NVIDIA Orin上用TensorRT对YOLO12进行多路加速并行推理时内存泄漏(上) 通过上篇的分析,发现问题在采集数据到传入GPU之前的阶段。但随着新一轮长时间测试发现,问题依然存在。 如上图,在运行20多分钟内存开始…

计数组合学7.17(Murnaghan–Nakayama 规则 )

7.17 Murnaghan–Nakayama 规则 我们已经成功地用基 mλm_\lambdamλ​、hλh_\lambdahλ​ 和 eλe_\lambdaeλ​ 表示了 Schur 函数 sλs_\lambdasλ​。本节我们将考虑幂和对称函数 pλp_\lambdapλ​。一个斜分划 λ/μ\lambda / \muλ/μ 是连通的,如果其分拆图…

使用 jlink 构建轻巧的自定义JRE

从 JDK 9 开始,Oracle JDK 和 OpenJDK 不再默认包含独立的 JRE 目录,而是提供了 jlink 工具(Java 链接器),允许你根据需求自定义生成最小化的 JRE(包含必要的模块)。以下是使用 jlink 生成 JRE …

[IOMMU]面向芯片/SoC验证工程的IOMMU全景速览

面向芯片/SoC验证工程的IOMMU全景速览 摘要:面向芯片/SoC 验证工程的 IOMMU 全景速览:包含基础概念、主流架构要点(ARM SMMU、Intel VT‑d、RISC‑V IOMMU),Linux 软件栈关系,SoC 上的验证方法(功能、错误、性能、系统化流程和覆盖),以及一个可用的“通用 IOMM…

Jenkins全链路教程——Jenkins用户权限矩阵配置

在企业级CI/CD场景中,“权限混乱”往往比“构建失败”更致命——测试员误删生产流水线、实习生修改关键插件配置、多团队共用账号导致责任无法追溯……这些问题,99%都能用权限矩阵彻底解决!今天,我们不仅会拆解权限矩阵的底层逻辑…

库函数蜂鸣器的使用(STC8)

使用库函数控制蜂鸣器(STC8) 在STC8系列单片机中,可以通过库函数或直接操作寄存器来控制蜂鸣器。以下是基于STC8库函数的常用方法: GPIO板蜂鸣器 #include "GPIO.h" #include "Delay.h"void GPIO_config()…

redis8.0.3部署于mac

macOS11因版本过低,安装redis时,Homebrew和源码编译两种方式都无法成功。将操作系统升级至macOS15再安装。Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值…

【和春笋一起学C++】(三十三)名称空间的其他特性

目录 嵌套式名称空间 拓展——未命名的名称空间 嵌套式名称空间 示例代码1: namespace electronicEquipment {namespace computer{double price 4999.0;string modelNumber;string name;}namespace ElectronicWatch{double price 99.0;string modelNumber;stri…

异步电动机负载运行特性全解析

异步电动机负载运行特性详解 ——从空载到负载的完整分析一、为什么需要再谈“负载运行” 在上一篇《感应电动机空载特性深度剖析》中,我们已经看到:空载时,若定子加额定电压,转子转速 $n \approx n_s$(同步转速&#…

使用 Ansys Discovery 进行动态设计和分析

Ansys Discovery 是一款多功能工具,为创建模型、探索仿真设计和分析解决方案提供了一个单一的交互式工作区。它允许用户使用直接建模技术创建和修改几何结构,定义仿真并与结果实时交互。Discovery 支持结构、流体流动、热和电磁设计,提供直观…

力扣热题100-----118.杨辉三角

案例 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 …

NTP /Chrony 网络时间协议

一、NTP(network time protocol)网络时间协议:实现时间同步,让设备时间与国际标准时间保持一致设备日志、服务日志需要记录时间分布式系统(分布式数据库、分布式缓存、分布式储存、消息队列)时间戳&#xf…

VSCode 刷 LeetCode 算法题配置教程

LeetCode 在线刷题地址:https://leetcode-cn.com/ 一、安装 Node.js 环境 LeetCode 插件依赖 node.js 运行环境,因此必须先安装: 前往官网下载安装:https://nodejs.cn/download/下载好的压缩包解压,可以看到当前文件…

非常简单!从零学习如何免费制作一个lofi视频

想必大家在网上会看到如下类似的音乐频道,这类频道都只是上传简单的Lo-Fi音乐带着循环播放的背景就可以赚钱。 那么上面的效果如何实现的呢?今天做一个可以免费制作lo-Fi音乐的教程。 Lo-Fi音乐: Lo-Fi音乐是一种以低保真度和模拟音色为特点…

基于 RAUC 的 Jetson OTA 升级全攻略

📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》 🎥 更多学习视频请关注 B 站:嵌入式Jerry 基于 RAUC 的 Jetson OTA 升级全攻略 0. 引子:常见问题 在 Jetson 平台做 OTA 升级时,你可能会问&…

MySQL 主备(Master-Slave)复制 的搭建

一、主备架构简介 Master(主库):负责处理所有写操作(INSERT/UPDATE/DELETE),并记录二进制日志(binlog)。Slave(备库):从主库拉取 binlog&#xff…

【三个数绝对值排序】2022-10-10

缘由绝对值比较&#xff0c;总是跑不过怎么办-编程语言-CSDN问答 template <class 形参> inline void 算交换(形参& a, 形参& b){ 形参 ab a - b; a - ab; b ab; } template <class 形参> void 三个升序(形参& a, 形参& b, 形参& c) {if (a…