4种方法用Python批量实现多Excel多Sheet合并

目录

方法一:使用pandas库

方法二:使用openpyxl库

方法三:使用xlrd和xlwt库

方法四:使用os和glob库


在数据处理中,经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法,使用Python批量实现多Excel多Sheet的合并。

方法一:使用pandas库

Pandas是Python中常用的数据处理库,提供了简便的数据处理功能。我们可以使用pandas的read_excel()函数读取Excel文件,然后使用concat()函数将多个工作表进行合并。

import pandas as pd  
  
# 读取Excel文件  
file_list = ['file1.xlsx', 'file2.xlsx']  
dfs = [pd.read_excel(file) for file in file_list]  
  
# 合并多个工作表  
result = pd.concat(dfs, ignore_index=True)  
  
# 保存到新的Excel文件  
result.to_excel('merged.xlsx', index=False)

方法二:使用openpyxl库

Openpyxl是Python中处理Excel文件的库,可以直接操作Excel文件。我们可以使用openpyxl的load_workbook()函数读取Excel文件,然后使用Workbook和Worksheet类创建新的工作簿和工作表,将多个工作表的数据复制到新的工作表中,最后保存为新的Excel文件。

from openpyxl import load_workbook  
from openpyxl.utils import get_column_letter  
from openpyxl.utils import range_boundaries  
from openpyxl.writer.excel import save_virtual_workbook  
from openpyxl import Workbook  
from openpyxl.utils import get_column_letter  
from openpyxl.utils.dataframe import dataframe_to_rows  
  
# 读取Excel文件  
file_list = ['file1.xlsx', 'file2.xlsx']  
merged_wb = Workbook()  
merged_ws = merged_wb.active  
merged_ws.title = "merged"  
headers = []  # 存储每个工作表的列名  
for file in file_list:  
    wb = load_workbook(filename=file)  
    ws = wb.active  # 获取第一个工作表  
    for row in ws[1:]:  # 获取列名  
        headers.append(row[0].value)  # 将列名添加到headers列表中  
    for row in ws:  # 获取数据行并复制到新的工作表中  
        new_row = []  # 存储新的一行数据  
        for cell in row:  # 遍历每个单元格并复制数据到新的行中  
            new_row.append(cell.value)  # 将单元格的值添加到新的行中  
        dataframe_to_rows(pd.DataFrame([new_row], columns=headers), index=False).map(lambda x: x.pop('Unnamed: 0'), axis=1).map(int).to_excel(merged_ws, index=False, header=False)  # 将新的行复制到新的工作表中,并设置数据类型为整数型  
merged_wb.save("merged.xlsx")  # 保存为新的Excel文件

方法三:使用xlrd和xlwt库

xlrd和xlwt是Python中用于读写Excel文件的库,可以处理.xls和.xlsx格式的文件。我们可以使用xlrd的open_workbook()函数读取Excel文件,然后使用Worksheet类获取工作表对象,遍历工作表中的所有数据,将数据写入新的Excel文件中。

import xlrd  
import xlwt  
  
# 读取Excel文件  
file_list = ['file1.xls', 'file2.xls']  
workbook = xlrd.open_workbook(file_list[0])  
  
# 创建新的Excel文件  
new_workbook = xlwt.Workbook()  
new_sheet = new_workbook.add_sheet('merged')  
  
# 获取第一个工作表  
sheet = workbook.sheet_by_index(0)  
  
# 合并多个工作表  
row = 0  # 当前行的索引  
for col in range(sheet.ncols):  # 遍历所有列  
    new_sheet.write(row, col, sheet.cell_value(0, col))  # 将列名写入新的工作表中  
    for row in range(1, sheet.nrows):  # 遍历所有数据行  
        new_sheet.write(row + row, col, sheet.cell_value(row, col))  # 将数据写入新的工作表中  
  
new_workbook.save('merged.xls')  # 保存为新的Excel文件

方法四:使用os和glob库

如果需要批量处理多个文件夹中的多个Excel文件,可以使用os和glob库来获取所有需要处理的文件。然后使用上述方法处理每个文件中的多个工作表,最后将结果保存到新的Excel文件中。

import os  
import glob  
import pandas as pd  
  
# 获取所有需要处理的Excel文件  
file_list = []  
folder_path = 'path/to/folder'  # Excel文件所在的文件夹路径  
for file in glob.glob(os.path.join(folder_path, '*.xlsx')):  # 获取所有.xlsx文件  
    file_list.append(file)  
  
# 合并多个工作表并保存到新的Excel文件中  
result = pd.DataFrame()  # 存储合并后的数据  
for file in file_list:  
    df = pd.read_excel(file)  # 读取Excel文件中的数据到DataFrame中  
    result = pd.concat([result, df])  # 将数据追加到结果中  
result.to_excel('merged.xlsx', index=False)  # 将结果保存到新的Excel文件中

在上述方法中,我们可以根据实际需求选择适合的方法进行多Excel多Sheet的合并。方法一和方法二适用于处理单个Excel文件中的多个工作表,而方法三和方法四则适用于批量处理多个Excel文件中的多个工作表。在实际应用中,我们可以根据数据量的大小、处理速度的要求以及个人偏好选择适合的方法。

注意事项

使用Python批量实现多Excel多Sheet合并时,需要注意以下事项:

  1. 文件路径和文件名:确保提供的文件路径和文件名正确无误,避免出现文件找不到或路径错误的情况。
  2. 文件格式和版本:确保所有要合并的Excel文件都是相同格式(如.xlsx)和版本,以免出现不兼容或读取错误。
  3. 表格格式和内容:在合并前,检查每个工作表的结构和内容是否一致,是否存在不同的列或数据类型。如果有差异,需要进行相应的处理或调整。
  4. 空值和缺失值:在合并过程中,可能会遇到空值或缺失值的情况。需要对这些值进行适当处理,例如填充、忽略或保留原始格式。
  5. 重复数据:合并多个Excel文件时,可能会存在重复的数据行。需要编写适当的逻辑来处理这些重复数据,例如保留最新的数据或根据特定条件进行筛选。
  6. 性能和内存使用:对于大量数据和多个Excel文件的合并操作,需要注意程序的性能和内存使用情况。如果数据量较大,可能需要考虑分批处理或使用更高效的数据处理方法。
  7. 错误处理:在合并过程中,可能会遇到各种错误,如文件损坏、格式不正确等。编写适当的错误处理逻辑可以帮助识别和处理这些错误,避免程序崩溃或数据丢失。
  8. 代码可维护性和可读性:编写易于理解和维护的代码可以提高代码的质量和可读性。注释、清晰的变量名和使用有意义的函数和方法名称等都是提高代码可读性的有效方法。
  9. 文档和注释:为代码添加文档和注释可以帮助其他人理解你的代码逻辑和实现方式。这对于团队合作或代码维护非常有用。
  10. 测试和验证:在合并之前,对每个单独的Excel文件进行测试和验证可以确保合并操作的有效性和准确性。通过比较合并前后的数据,可以发现潜在的问题并进行相应的修复。

此外,除了上述方法外,还有一些第三方库如pyexcelerate等也可以实现多Excel多Sheet的合并。这些库提供了更多的功能和灵活性,可以根据实际需求选择适合的库进行使用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消费增值模式:引领消费者与平台共创双赢的新篇章

在数字化时代,消费模式正在发生深刻变革。消费者不再满足于单纯的购物行为,而是寻求更加个性化和有价值的消费体验。而平台也面临着如何吸引和留住消费者的挑战。消费增值模式作为一种新型的商业模式,正逐渐成为解决这一问题的关键。 消费增…

Java多线程并发篇----第十八篇

系列文章目录 文章目录 系列文章目录前言一、寄存器二、程序计数器三、PCB-“切换桢”四、上下文切换的活动五、引起线程上下文切换的原因前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

3D Guassians Splatting相关解读

从已有的点云模型出发,以每个点为中心,建立可学习的高斯表达,用Splatting即抛雪球的方法进行渲染,实现高分辨率的实时渲染。 1、主要思想 1.引入了一种各向异性(anisotropic)的3D高斯分布作为高质量、非结…

查看centos的CPU、内存、磁盘空间等配置信息

目录 查看CPU/proc/cpuinfo中的信息 查看内存/proc/meminfo中的信息 查看磁盘空间df 命令du命令使用fdisk命令 查看CPU /proc/cpuinfo中的信息 前置: [ltkjltkj front]$ cat /proc/cpuinfo| grep "physical id" physical id : 0 physical id : 0 physi…

智慧校园大数据平台架构

平台架构 基础硬件层 基础硬件层是由一组低廉的PC或服务器组合构建而成。基础硬件层主要承载着数据的存储、运算、容错、调度和通信等任务,对基础应用层下达的指令进行执行和反馈。 数据集成 大数据特征表现在实时、交互、海量等方面,并且以半结构化、非结构化数据为主,价…

机器学习系统或者SysMLDL笔记

在使用过TVM、TensorRT等优秀的机器学习编译优化系统以及Pytorch、Keras等深度学习框架后,总觉得有必要从理论上对这些系统进行一些分析,虽然说在实践中学习是最快最直接的(指哪儿打哪儿、不会哪儿查哪儿),但恶补一些关于系统设计的一些知识还…

搜索经典题——填充 9*9矩阵

题目:给定一个九行九列矩阵,填充矩阵元素,要求: 1、每一行每一列,每个小九宫格(图片画粗的地方就是)不能包含相同元素 2、每一行,每一列,每个小九宫格均会完整出现1-9的数…

Python进程池multiprocessing.Pool

环境: 鲲鹏920:192核心 内存:756G python:3.9 python单进程的耗时 在做单纯的cpu计算的场景,使用单进程核多进程的耗时做如下测试: 单进程情况下cpu的占用了如下,占用一半的核心数: 每一步…

第二百六十九回

文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的…

SAP PI之Rest adapter

一,简介 REST风格接口是以http为传输协议,以xml或json或text为有效负载。下图展示了REST到XI再返回的一个过程,一个REST接口包含的信息有:服务URL、URL中带的参数、http方法(post/get/put等)、http头部、body部分的有效载荷。而X…

2023年全球软件质量效能大会(QECon北京站):核心内容与学习收获(附大会核心PPT下载)

此次大会的主题为“智能时代的质量新篇章”。来自全球的软件质量与效能专家、企业领袖、技术研发人员等齐聚一堂,共同探讨软件质量与效能的新理念、新技术、新实践。 一、大会的核心内容 1、智能时代软件质量的新挑战与机遇 随着人工智能、大数据等技术的快速发展…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件,写入 module.exports {publicPath: ./, }

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实,“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解,但不是最优解 1.痛点 上一篇文章的标题是: 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

matlab 直道转向时方向盘最小转角算法

1、内容简介 略 33-可以交流、咨询、答疑 2、内容说明 汽车主动转向,直道转向时方向盘最小转角算法,一个m脚本和simulink的计算结果 略 3、仿真分析 略 4、参考论文 汽车主动转向关键技术研究

黑马程序员_多线程

基础知识 什么是线程 被包含在进程之中, 可以调度的最小单位应用软件中互相独立,可以同时运行的功能 什么是进程 程序的基本执行实体 总结: 什么是多线程? 有了多线程,可以让程序同时做多件事情 多线程有什么作用&…

DC电源模块在新能源领域的应用前景

BOSHIDA DC电源模块在新能源领域的应用前景 DC电源模块在新能源领域有着广阔的应用前景。随着可再生能源技术的发展和普及,如太阳能和风能等的应用逐渐增多,DC电源模块在这些领域的应用越来越重要。 首先,DC电源模块可以用于太阳能发电系统…

车载音频EMI的产生及典型音频功放AW836XX的解决方案

之前针对 eCall的文章中有提到D类音频功放需要关注EMI问题(点击文章回看《车载eCall系统音频应用解决方案》),在此展开此问题并寻求解决方案。 1. EMI定义与分类 电磁干扰(Electromagnetic Interference,EMI&#xff…

geemap学习笔记049:下载Landsat数据时遇到的一个问题

前言 最近在下载Landsat 8 地面反射率数据(Surface Reflectance)时,遇到了一个问题,无论是使用geemap.ee_export_image_to_drive() 函数还是geemap.download_ee_image() 函数下载的数据,易康都打不开,显示…

【CSDN博客系列】自定义模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

还在为crontab表达式发愁吗,快使用这个工具

是不是每次要定义cron表达式的时候,都去百度翻找资料,cron表达式难写难记真是苦天下程序员久已。有没有什么不拥记的办法就轻松掌握呢?最近发现这个CrontabGuru神器,强烈推荐,真是广大程序员的福音了。 简介 Crontab…