Python兩個Excel多Sheet數據對比
在數據處理與分析中,經常需要比較來自不同來源的數據集,特別是在處理涉及多個Excel工作簿和工作表的場景時。Python的Pandas庫提供了強大的工具,可以幫助我們高效地完成這一任務。下面,我們將一步步引導你如何使用Python對比兩個Excel文件中多個Sheet的數據。
第一步:安裝必要的庫
確保你的Python環境中已安裝pandas和openpyxl。如果沒有安裝,可以通過以下命令安裝:
pip install pandas openpyxl
第二步:讀取Excel文件中的多個Sheet
使用pandas.ExcelFile或pandas.read_excel直接讀取多個Sheet的數據。
import pandas as pd
# 讀取第一個Excel文件的所有Sheet
xlsx1 = pd.ExcelFile('file1.xlsx')
sheets1 = {sheet_name: xlsx1.parse(sheet_name) for sheet_name in xlsx1.sheet_names}
# 讀取第二個Excel文件的所有Sheet
xlsx2 = pd.ExcelFile('file2.xlsx')
sheets2 = {sheet_name: xlsx2.parse(sheet_name) for sheet_name in xlsx2.sheet_names}
第三步:對比數據
對比兩個Excel文件中相同名稱的Sheet。我們可以逐個Sheet進行對比,尋找不一致的數據行。
# 創建一個空的字典來存儲對比結果
comparison_results = {}
for sheet_name in sheets1.keys():
if sheet_name in sheets2:
# 如果兩個文件都有相同的Sheet,則進行對比
df1 = sheets1[sheet_name]
df2 = sheets2[sheet_name]
# 比較兩個DataFrame
comparison = df1.merge(df2, how='outer', indicator=True)
comparison_results[sheet_name] = comparison[comparison['_merge'] != 'both']
第四步:分析差異
上述對比會返回一個新DataFrame,其中包含標記為left_only或right_only的行,表示只在左側或右側數據集中存在。此外,還可以通過left和right后綴訪問原始數據列。
# 分析差異
for sheet_name, result in comparison_results.items():
if not result.empty:
print(f"Differences found in '{sheet_name}':")
print(result)
第五步:保存對比結果
將對比結果保存到新的Excel文件中,便于后續分析或報告。
with pd.ExcelWriter('comparison_results.xlsx') as writer:
for sheet_name, result in comparison_results.items():
if not result.empty:
result.to_excel(writer, sheet_name=sheet_name, index=False)
完整代碼示例
下面是將上述步驟整合在一起的完整代碼示例:
import pandas as pd
# 讀取Excel文件
xlsx1 = pd.ExcelFile('file1.xlsx')
xlsx2 = pd.ExcelFile('file2.xlsx')
# 讀取所有Sheet
sheets1 = {sheet_name: xlsx1.parse(sheet_name) for sheet_name in xlsx1.sheet_names}
sheets2 = {sheet_name: xlsx2.parse(sheet_name) for sheet_name in xlsx2.sheet_names}
# 創建一個空的字典來存儲對比結果
comparison_results = {}
# 對比數據
for sheet_name in sheets1.keys():
if sheet_name in sheets2:
df1 = sheets1[sheet_name]
df2 = sheets2[sheet_name]
comparison = df1.merge(df2, how='outer', indicator=True)
comparison_results[sheet_name] = comparison[comparison['_merge'] != 'both']
# 保存對比結果
with pd.ExcelWriter('comparison_results.xlsx') as writer:
for sheet_name, result in comparison_results.items():
if not result.empty:
result.to_excel(writer, sheet_name=sheet_name, index=False)
通過上述步驟,你可以有效地對比兩個Excel文件中多個Sheet的數據,找出差異并保存結果。這種方法特別適用于財務審計、數據清洗或任何需要跨數據集一致性檢查的場景。
希望這篇指南能夠幫助你在Python中處理復雜的Excel數據對比任務。