利用Python實現(xiàn)去重聚合Excel數(shù)據(jù)并對比兩份數(shù)據(jù)的差異
問題背景
在數(shù)據(jù)處理過程中,常常需要將多個數(shù)據(jù)表進行合并,并進行比對,以便找出數(shù)據(jù)的差異和共同之處。本文將介紹如何使用 Pandas 庫對兩個 Excel 數(shù)據(jù)表進行合并與比對,并將結(jié)果輸出到新的 Excel 文件中。
讀取數(shù)據(jù)表
首先,我們使用 Pandas 庫中的 read_excel 函數(shù)來讀取兩個 Excel 文件中的數(shù)據(jù),分別存儲到 left_df 和 right_df 變量中。
import pandas as pd
left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對\\數(shù)據(jù)1.xlsx')
right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對\\數(shù)據(jù)2.xlsx')數(shù)據(jù)表分組求和
接下來,我們對 left_df 和 right_df 分別按照 '店鋪名稱' 和 '訂單號' 進行分組,并對其他列進行求和操作。
left_df = left_df.groupby(['店鋪名稱', '訂單號'], as_index=False).sum() right_df = right_df.groupby(['店鋪名稱', '訂單號'], as_index=False).sum()
合并數(shù)據(jù)表
然后,我們使用 merge 函數(shù)將經(jīng)過分組求和后的兩個 DataFrame 進行合并,同時啟用標(biāo)記列以標(biāo)識每行數(shù)據(jù)的來源。
merged_df = pd.merge(left_df, right_df, how='outer', on=['訂單號', '店鋪名稱'], indicator=True)
添加標(biāo)記結(jié)果列
根據(jù)合并的結(jié)果,我們添加一個新列 'merge_result',用于標(biāo)記每條記錄屬于左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)還是右側(cè)有的數(shù)據(jù)。
conditions = [
(merged_df['_merge'] == 'left_only'), # 左側(cè)有的數(shù)據(jù)
(merged_df['_merge'] == 'both'), # 左右兩邊都有的數(shù)據(jù)
(merged_df['_merge'] == 'right_only') # 右側(cè)有的數(shù)據(jù)
]
choices = ['Left only', 'Both', 'Right only']
merged_df['merge_result'] = np.select(conditions, choices)保存結(jié)果到 Excel 文件
最后,我們將合并后的結(jié)果寫入到新的 Excel 文件中,以便進一步分析和分享。
merged_df.to_excel('merged.xlsx', index=False)總結(jié)
通過以上步驟,我們成功地使用 Pandas 完成了兩個數(shù)據(jù)表的合并與比對,并將結(jié)果保存到了新的 Excel 文件中。這個過程為我們展示了如何利用 Pandas 庫進行數(shù)據(jù)處理和分析,為日常工作中的數(shù)據(jù)清洗和整合提供了有力的支持。
完整代碼
import pandas as pd
import numpy as np
# 讀取兩個 Excel 文件
left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對\\數(shù)據(jù)1.xlsx')
right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\數(shù)據(jù)核對\\數(shù)據(jù)2.xlsx')
# 對 left_df DataFrame 進行分組求和
left_df = left_df.groupby(['店鋪名稱', '訂單號'], as_index=False).sum()
# 對 right_df DataFrame 進行分組求和
right_df = right_df.groupby(['店鋪名稱', '訂單號'], as_index=False).sum()
# 合并兩個數(shù)據(jù)表,并啟用標(biāo)記列
merged_df = pd.merge(left_df, right_df, how='outer', on=['訂單號', '店鋪名稱'], indicator=True)
# 使用 merge 函數(shù)將左右兩個 DataFrame 進行合并
# how='outer' 表示執(zhí)行外連接操作,包括左邊有的、都有的和右邊有的數(shù)據(jù)
# on=['訂單號', '店鋪名稱'] 表示合并所依據(jù)的關(guān)鍵字列名是 '訂單號' 和 '店鋪名稱'
# indicator=True 表示啟用一個標(biāo)記列 '_merge' 來標(biāo)記每個行的來源
# 根據(jù)標(biāo)記列的值,添加一個標(biāo)記結(jié)果列
conditions = [
(merged_df['_merge'] == 'left_only'), # 左側(cè)有的數(shù)據(jù)
(merged_df['_merge'] == 'both'), # 左右兩邊都有的數(shù)據(jù)
(merged_df['_merge'] == 'right_only') # 右側(cè)有的數(shù)據(jù)
]
choices = ['Left only', 'Both', 'Right only']
# 對應(yīng)上述條件的選擇,分別為左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)、右側(cè)有的數(shù)據(jù)
merged_df['merge_result'] = np.select(conditions, choices)
# 使用 np.select 函數(shù)根據(jù)條件和選擇,在 DataFrame 中添加一個新列 'merge_result',標(biāo)記為左側(cè)有的數(shù)據(jù)、都有的數(shù)據(jù)或右側(cè)有的數(shù)據(jù)
# 將結(jié)果寫入到 Excel 文件中
merged_df.to_excel('merged.xlsx', index=False)
# 將合并后的結(jié)果寫入到 Excel 文件 'merged.xlsx' 中,不包含索引列以上就是利用Python實現(xiàn)去重聚合Excel數(shù)據(jù)并對比兩份數(shù)據(jù)的差異的詳細內(nèi)容,更多關(guān)于Python對比Excel數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pycharm配置anaconda環(huán)境時找不到python.exe解決辦法
今天來說一下python中一個管理包很好用的工具anaconda,可以輕松實現(xiàn)python中各種包的管理,這篇文章主要給大家介紹了關(guān)于pycharm配置anaconda環(huán)境時找不到python.exe的解決辦法,需要的朋友可以參考下2023-10-10
Python基于多線程實現(xiàn)抓取數(shù)據(jù)存入數(shù)據(jù)庫的方法
這篇文章主要介紹了Python基于多線程實現(xiàn)抓取數(shù)據(jù)存入數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Python使用數(shù)據(jù)庫類與多線程類進行數(shù)據(jù)抓取與寫入數(shù)據(jù)庫操作的具體使用技巧,需要的朋友可以參考下2018-06-06
python3 實現(xiàn)函數(shù)寫文件路徑的正確方法
今天小編就為大家分享一篇python3 實現(xiàn)函數(shù)寫文件路徑的正確方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11

