引言
在日常數據處理中,合并Excel文件是常見需求。Python提供了多種庫(如pandas
、openpyxl
)來實現這一操作。本文將詳細介紹兩種主流方法,并附上完整代碼示例,幫助您高效完成Excel合并任務。
方法一:使用pandas庫(推薦)
簡介
pandas
是Python中處理表格數據的核心庫,支持快速讀取、合并和保存Excel文件。適用于縱向合并(追加數據)和橫向合并(按列拼接)。
安裝
pip install pandas openpyxl xlrd
場景1:縱向合并(追加數據)
示例數據
假設有兩個Excel文件file1.xlsx
和file2.xlsx
,結構如下:
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# 讀取兩個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("縱向合并完成!")
輸出結果
Name | Age | City |
---|---|---|
Alice | 25 | New York |
Bob | 30 | London |
Charlie | 28 | Paris |
David | 35 | Berlin |
場景2:橫向合并(按列拼接)
示例數據
假設file1.xlsx
包含用戶信息,file2.xlsx
包含訂單數據,需按用戶ID合并:
file1.xlsx
UserID | Name |
---|---|
1 | Alice |
2 | Bob |
file2.xlsx
UserID | Order |
---|---|
1 | Book |
2 | Laptop |
代碼示例
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("橫向合并完成!")
輸出結果
UserID | Name | Order |
---|---|---|
1 | Alice | Book |
2 | Bob | Laptop |
注意事項
- 列名一致性:縱向合并時,確保兩個文件的列名完全一致(包括大小寫和空格)。
- 索引處理:使用
ignore_index=True
重置合并后的索引。 - 去重操作:合并后可通過
drop_duplicates()
去除重復行。 - 內存優化:處理大型文件時,可分塊讀取(
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文件的合并,并根據具體需求選擇最合適的工具。