基于Python讀取多個excel豎向拼接為一個excel

在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…