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
英文地址,請注明出處:http://en.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…