在Python中,可以使用pandas库结合glob模块来遍历读取多个Excel文件,并将它们竖向拼接为一个DataFrame对象。以下是完整的实现方法:

文章目录

  • 方法1:使用`glob`匹配文件 + `pd.concat()`
  • 方法2:使用列表推导式(更简洁)
  • 方法3:处理多个Sheet的情况
  • 高级用法:添加文件来源列
  • 注意事项
  • 完整示例(推荐)

方法1:使用glob匹配文件 + pd.concat()

import pandas as pd
import glob# 1. 获取所有Excel文件路径(支持.xlsx和.xls)
excel_files = glob.glob('*.xlsx') + glob.glob('*.xls')  # 当前目录下所有Excel文件
# 或者指定路径:glob.glob('/path/to/files/*.xlsx')# 2. 读取并拼接所有Excel文件
dfs = []
for file in excel_files:df = pd.read_excel(file)  # 可以添加参数如sheet_name='Sheet1'dfs.append(df)# 3. 竖向拼接所有DataFrame
result = pd.concat(dfs, ignore_index=True)# 4. 查看结果
print(result)# 保存为一个xlsx
result.to_excel('汇总.xlsx')

方法2:使用列表推导式(更简洁)

import pandas as pd
import glob# 读取并拼接所有Excel文件
result = pd.concat([pd.read_excel(f) for f in glob.glob('*.xlsx') + glob.glob('*.xls')
], ignore_index=True)print(result)
# 保存为一个xlsx
result.to_excel('汇总.xlsx')

方法3:处理多个Sheet的情况

如果需要读取每个Excel文件的多个Sheet:

import pandas as pd
import globdfs = []
for file in glob.glob('*.xlsx'):# 获取所有Sheet名称sheets = pd.ExcelFile(file).sheet_namesfor sheet in sheets:df = pd.read_excel(file, sheet_name=sheet)dfs.append(df)result = pd.concat(dfs, ignore_index=True)
# 保存为一个xlsx
result.to_excel('汇总.xlsx')

高级用法:添加文件来源列

如果需要知道每行数据来自哪个文件:

dfs = []
for file in glob.glob('*.xlsx'):df = pd.read_excel(file)df['source_file'] = file  # 添加来源文件列dfs.append(df)result = pd.concat(dfs, ignore_index=True)
# 保存为一个xlsx
result.to_excel('汇总.xlsx')

注意事项

  1. 内存管理:如果文件很大或很多,建议分批处理或使用chunksize参数
  2. 列一致性:确保所有Excel文件的列结构相同,否则拼接后会出现很多NaN值
  3. 性能优化:对于大量文件,可以使用tqdm显示进度条:
    from tqdm import tqdm
    dfs = []
    for file in tqdm(glob.glob('*.xlsx')):dfs.append(pd.read_excel(file))
    result = pd.concat(dfs, ignore_index=True)# 保存为一个xlsxresult.to_excel('汇总.xlsx')
    
  4. 异常处理:添加try-except块处理损坏的文件
    dfs = []
    for file in glob.glob('*.xlsx'):try:dfs.append(pd.read_excel(file))except Exception as e:print(f"Error reading {file}: {str(e)}")
    

完整示例(推荐)

import pandas as pd
import globdef read_and_concat_excels(pattern='*.xlsx', sheet_name=0, add_source=False):"""读取并拼接多个Excel文件参数:pattern: 文件匹配模式 (如 'data/*.xlsx')sheet_name: 要读取的Sheet名称或索引add_source: 是否添加来源文件列返回:拼接后的DataFrame"""dfs = []for file in glob.glob(pattern):try:df = pd.read_excel(file, sheet_name=sheet_name)if add_source:df['source_file'] = filedfs.append(df)except Exception as e:print(f"跳过文件 {file}: {str(e)}")if not dfs:raise ValueError("没有找到可读取的Excel文件")return pd.concat(dfs, ignore_index=True)# 使用示例
combined_df = read_and_concat_excels(pattern='input_files/*.xlsx', add_source=True)
combined_df.to_excel('汇总.xlsx', index=False)

这种方法既健壮又灵活,可以处理大多数Excel文件拼接的场景。

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

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

相关文章

Linux《进程信号(下)》

在之前的Linux《进程信号(上)》当中我们已经了解了进程信号的基本概念以及知道了信号产生的方式有哪些,还了解了信号是如何进行保存的,那么接下来在本篇当中就将继续之前的学习了解信号是如何处理的。除此之外还会了解到中断的概念…

android 性能优化—ANR

ANR产生原理ANR(Application Not Responding)是 Android 对 “应用主线程卡死” 的系统级保护机制: 当 输入事件、广播、服务 等在规定时间内未被处理完毕,SystemServer 会弹框并杀进程,防止整个系统跟着假死。计时起点…

stm32——单总线,DHT11

目录 一、单总线协议的原理和应用 单总线协议指的是只采用一根信道来进行数据传输,通信指的是双方(MCU与传感器)通过一根信道进行数据交互,所以按照数据的传输方向,只能采用半双工通信方式,比较典型的传感器…

css3之grid布局

容器:gird container开启grid布局的元素 项目:grid items容器里面的子元素,不包括后代元素 显式网格(单元格):通过grid-template-columns和grid-template-rows指定的网格,注意项目不等于单元格,…

C++容器:list

一、list的介绍及使用 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素…

STL库——map/set(类函数学习)

ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言; 文章目录 前言 一、序列式容器和关联式容器 二、set 系列的使用 2.1、set 和 multiset 参考文档 2.2、set…

计算机网络IP协议

1.TCP协议1.1 确认应答1.2 超时重传1.3 连接管理1.4 滑动窗口1.5 流量控制1.6 拥塞控制 1.7 延时应答1.8 稍带应答1.9 粘包问题1.10 异常情况2.IP协议 网络层2.1 NAT机制下的几种情况:同一个局域网中,内网ip访问 内网 ip,可以的不同局域网中,内网IP访问 内网IP,不行~~外网IP访…

Windows电脑如何查看wifi连接记录及连接时间

查询WIFI 连接的记录 echo netsh wlan show profiles netsh wlan show wlanreport POWERSHELL 脚本 Get-WinEvent -LogName Microsoft-Windows-WLAN-AutoConfig/Operational | Where-Object { $_.Id -in (8001,8002) } | Select-Object TimeCreated, Id, {Name"Action…

【golang学习笔记 gin 】1.2 redis 的使用

安装redis go get -u github.com/gin-gonic/gin go get -u github.com/go-redis/redis/v8创建相关目录 gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 封装Redis package config impor…

Java学习之——“IO流“的进阶流之序列化流的学习

一、核心概念:什么是序列化与反序列化?序列化 (Serialization): 将一个对象(在内存中的状态)转换成一个字节序列的过程。这个字节序列包含了对象的数据、对象的类型以及对象中存储的属性等信息。反序列化 (Deserializa…

机器学习04——决策树(信息增益、信息增益率、ID3、C4.5、CART、剪枝、连续值缺失值处理)

上一章:机器学习03——线性模型 下一章:机器学习05——多分类学习与类别不平衡 机器学习实战项目:【从 0 到 1 落地】机器学习实操项目目录:覆盖入门到进阶,大学生就业 / 竞赛必备 文章目录一、决策树的基本流程&#…

(论文速读)从语言模型到通用智能体

论文题目:From Multimodal LLMs to Generalist Embodied Agents: Methods and Lessons(从多模式大型语言模型到多面手具身代理:方法和教训)会议:CVPR2025摘要:我们研究了多模态大型语言模型(Multimodal Large Language…

【Epiq Solutions】Matchstiq™ G20 和 Matchstiq™ G40 AI SDR

Matchstiq™ G20 和 Matchstiq™ G40 产品简介 Matchstiq™ G20 和 Matchstiq™ G40 是 Epiq Solutions 推出的 紧凑型、高性能软件定义无线电(SDR)平台,专为满足 严苛 SWaP-C(体积、重量、功耗受限)场景下的战术与移动…

基于Echarts+HTML5可视化数据大屏展示-旅游智慧中心

效果展示&#xff1a; 代码结构&#xff1a;主要代码实现 index.html布局 <!DOCTYPE html> <html lang"en" style"font-size: 97.5px;"> <head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"…

Docker 镜像的使用

1.镜像的基本信息[roothost1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 802541663949 2 weeks ago 78.1MB hello-world latest 1b44b5a3e06a 4 weeks ago 10.1kB执行 docker images 命令时加上 --no…

网络编程;套接字;TCP通讯;UDP通讯;0909

思维导图TCP服务器端和客户端通讯服务器端 代码#include<myhead.h> #define SER_IP "192.168.109.12"//我的虚拟机的ip #define SER_PORT 8888 int main() {//1.创建一个用于连接的套接字文件描述符int sfd socket(AF_INET,SOCK_STREAM,0);if(sfd-1){perror(&…

贪心算法应用:柔性制造系统(FMS)刀具分配问题详解

Java中的贪心算法应用&#xff1a;柔性制造系统(FMS)刀具分配问题详解 1. 问题背景与定义 柔性制造系统(Flexible Manufacturing System, FMS)是现代智能制造中的关键组成部分&#xff0c;它能够灵活地适应不同产品的生产需求。在FMS中&#xff0c;刀具分配是一个核心优化问题&…

不止是DELETE:MySQL多表关联删除的JOIN语法实战详解

MySQL 的 ​​DELETE​​ 语句用于从数据库表中删除记录。这是一项非常强大且危险的操作&#xff0c;因为一旦执行&#xff0c;数据通常无法恢复。理解其语法和安全实践至关重要。以下是 MySQL 删除语句的详细指南。一、 核心语法&#xff1a;DELETE​​DELETE​​ 语句用于删除…

ubuntu 系統使用過程中黑屏問題分析

背景&#xff1a; 工欲善其事&#xff0c;必先利其器。作为程序员&#xff0c;想要得到更好的发展&#xff0c;遇到问题直接baidu, google 虽然可以得到一些参考或者答案&#xff0c;但是也会降低自己的思考能力&#xff0c;本文以ubuntu 使用过程中黑屏这一问题为背景&#x…

Redis(45)哨兵模式与集群模式有何区别?

Redis 提供了两种高可用性解决方案&#xff1a;哨兵模式和集群模式。它们各自有不同的特点和适用场景。以下是详细的对比和结合代码的示例&#xff1a; 哨兵模式&#xff08;Sentinel&#xff09; 特点高可用性&#xff1a; Sentinel 通过监控、通知、故障转移等功能&#xff0…