Python合并兩個(gè)Excel文件的兩種主流方法
引言
在日常數(shù)據(jù)處理中,合并Excel文件是常見需求。Python提供了多種庫(kù)(如pandas、openpyxl)來(lái)實(shí)現(xiàn)這一操作。本文將詳細(xì)介紹兩種主流方法,并附上完整代碼示例,幫助您高效完成Excel合并任務(wù)。
方法一:使用pandas庫(kù)(推薦)
簡(jiǎn)介
pandas是Python中處理表格數(shù)據(jù)的核心庫(kù),支持快速讀取、合并和保存Excel文件。適用于縱向合并(追加數(shù)據(jù))和橫向合并(按列拼接)。
安裝
pip install pandas openpyxl xlrd
場(chǎng)景1:縱向合并(追加數(shù)據(jù))
示例數(shù)據(jù)
假設(shè)有兩個(gè)Excel文件file1.xlsx和file2.xlsx,結(jié)構(gòu)如下:
file1.xlsx
| Name | Age | City |
|---|---|---|
| Alice | 25 | New York |
| Bob | 30 | London |
file2.xlsx
| Name | Age | City |
|---|---|---|
| Charlie | 28 | Paris |
| David | 35 | Berlin |
代碼示例
import pandas as pd
# 讀取兩個(gè)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("縱向合并完成!")
輸出結(jié)果
| Name | Age | City |
|---|---|---|
| Alice | 25 | New York |
| Bob | 30 | London |
| Charlie | 28 | Paris |
| David | 35 | Berlin |
場(chǎng)景2:橫向合并(按列拼接)
示例數(shù)據(jù)
假設(shè)file1.xlsx包含用戶信息,file2.xlsx包含訂單數(shù)據(jù),需按用戶ID合并:
file1.xlsx
| UserID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
file2.xlsx
| UserID | Order |
|---|---|
| 1 | Book |
| 2 | Laptop |
代碼示例
import pandas as pd
# 讀取兩個(gè)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("橫向合并完成!")
輸出結(jié)果
| UserID | Name | Order |
|---|---|---|
| 1 | Alice | Book |
| 2 | Bob | Laptop |
注意事項(xiàng)
- 列名一致性:縱向合并時(shí),確保兩個(gè)文件的列名完全一致(包括大小寫和空格)。
- 索引處理:使用
ignore_index=True重置合并后的索引。 - 去重操作:合并后可通過(guò)
drop_duplicates()去除重復(fù)行。 - 內(nèi)存優(yōu)化:處理大型文件時(shí),可分塊讀?。?code>chunksize參數(shù))。
方法二:使用openpyxl庫(kù)(保留格式)
簡(jiǎn)介
openpyxl可直接操作Excel文件,支持保留原始格式(如字體、顏色),但代碼稍復(fù)雜。適用于需要保留樣式的場(chǎng)景。
安裝
pip install openpyxl
代碼示例(縱向合并)
from openpyxl import Workbook, load_workbook
# 加載第一個(gè)Excel文件
wb1 = load_workbook('file1.xlsx')
ws1 = wb1.active
# 加載第二個(gè)Excel文件
wb2 = load_workbook('file2.xlsx')
ws2 = wb2.active
# 創(chuàng)建新工作簿
new_wb = Workbook()
new_ws = new_wb.active
# 復(fù)制第一個(gè)文件的所有行
for row in ws1.iter_rows(values_only=True):
new_ws.append(row)
# 復(fù)制第二個(gè)文件的所有行(跳過(guò)標(biāo)題行)
for row in ws2.iter_rows(min_row=2, values_only=True):
new_ws.append(row)
# 保存新文件
new_wb.save('combined_openpyxl.xlsx')
print("使用openpyxl合并完成!")
優(yōu)勢(shì)與局限
- 優(yōu)勢(shì):保留原始格式(如顏色、邊框)。
- 局限:代碼復(fù)雜度高,不支持橫向合并。
方案對(duì)比
| 方法 | 適用場(chǎng)景 | 優(yōu)點(diǎn) | 缺點(diǎn) |
|---|---|---|---|
| pandas | 快速合并、數(shù)據(jù)清洗、橫向/縱向合并 | 代碼簡(jiǎn)潔、支持大數(shù)據(jù)量 | 無(wú)法保留格式 |
| openpyxl | 保留Excel樣式、操作工作表結(jié)構(gòu) | 格式完全保留 | 代碼復(fù)雜、性能較低 |
常見問(wèn)題解答
1. 如何合并多個(gè)Excel文件?
使用pandas可循環(huán)讀取多個(gè)文件:
import pandas as pd
all_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. 合并時(shí)如何指定工作表?
使用sheet_name參數(shù):
df = pd.read_excel('file.xlsx', sheet_name='Sheet2')
3. 如何處理合并后的空值?
使用dropna()去除空行:
combined_df.dropna(inplace=True)
總結(jié)
- 推薦方案:
- 數(shù)據(jù)清洗優(yōu)先:選擇
pandas庫(kù),支持靈活的合并和清洗操作。 - 保留格式優(yōu)先:使用
openpyxl庫(kù),但僅適用于簡(jiǎn)單縱向合并。
- 數(shù)據(jù)清洗優(yōu)先:選擇
通過(guò)本文的兩種方法,您可以輕松實(shí)現(xiàn)Excel文件的合并,并根據(jù)具體需求選擇最合適的工具。
到此這篇關(guān)于Python合并兩個(gè)Excel文件的兩種主流方法的文章就介紹到這了,更多相關(guān)Python合并Excel文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python爬取本站電子書信息并入庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了python爬取本站電子書信息并入庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2020-01-01
Python去除字符串中某個(gè)字符的多種實(shí)現(xiàn)方法
這篇文章主要介紹了Python去除字符串中某個(gè)字符的多種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
python字符串常用方法及文件簡(jiǎn)單讀寫的操作方法
字符串(sting)是 Python 中最常用的數(shù)據(jù)類型。我們可以使用引號(hào)('或")來(lái)創(chuàng)建字符。本文給大家介紹python字符串常用方法及文件簡(jiǎn)單讀寫的操作方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-03-03
python基于xml parse實(shí)現(xiàn)解析cdatasection數(shù)據(jù)
這篇文章主要介紹了python基于xml parse實(shí)現(xiàn)解析cdatasection數(shù)據(jù)的方法,是非常實(shí)用技巧,需要的朋友可以參考下2014-09-09

