利用Python 去重聚合Excel数据并对比两份数据的差异
问题背景
在数据处理过程中,常常需要将多个数据表进行合并,并进行比对,以便找出数据的差异和共同之处。本文将介绍如何使用 Pandas 库对两个 Excel 数据表进行合并与比对,并将结果输出到新的 Excel 文件中。
读取数据表
首先,我们使用 Pandas 库中的 read_excel
函数来读取两个 Excel 文件中的数据,分别存储到 left_df
和 right_df
变量中。
import pandas as pd left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据1.xlsx') right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据2.xlsx')
数据表分组求和
接下来,我们对 left_df
和 right_df
分别按照 '店铺名称' 和 '订单号' 进行分组,并对其他列进行求和操作。
left_df = left_df.groupby(['店铺名称', '订单号'], as_index=False).sum() right_df = right_df.groupby(['店铺名称', '订单号'], as_index=False).sum()
合并数据表
然后,我们使用 merge
函数将经过分组求和后的两个 DataFrame 进行合并,同时启用标记列以标识每行数据的来源。
merged_df = pd.merge(left_df, right_df, how='outer', on=['订单号', '店铺名称'], indicator=True)
添加标记结果列
根据合并的结果,我们添加一个新列 'merge_result',用于标记每条记录属于左侧有的数据、都有的数据还是右侧有的数据。
conditions = [ (merged_df['_merge'] == 'left_only'), # 左侧有的数据 (merged_df['_merge'] == 'both'), # 左右两边都有的数据 (merged_df['_merge'] == 'right_only') # 右侧有的数据 ] choices = ['Left only', 'Both', 'Right only'] merged_df['merge_result'] = np.select(conditions, choices)
保存结果到 Excel 文件
最后,我们将合并后的结果写入到新的 Excel 文件中,以便进一步分析和分享。
merged_df.to_excel('merged.xlsx', index=False)
总结
通过以上步骤,我们成功地使用 Pandas 完成了两个数据表的合并与比对,并将结果保存到了新的 Excel 文件中。这个过程为我们展示了如何利用 Pandas 库进行数据处理和分析,为日常工作中的数据清洗和整合提供了有力的支持。
完整代码
import pandas as pd import numpy as np # 读取两个 Excel 文件 left_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据1.xlsx') right_df = pd.read_excel('C:\\Users\\Admin\\Desktop\\数据核对\\数据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() # 合并两个数据表,并启用标记列 merged_df = pd.merge(left_df, right_df, how='outer', on=['订单号', '店铺名称'], indicator=True) # 使用 merge 函数将左右两个 DataFrame 进行合并 # how='outer' 表示执行外连接操作,包括左边有的、都有的和右边有的数据 # on=['订单号', '店铺名称'] 表示合并所依据的关键字列名是 '订单号' 和 '店铺名称' # indicator=True 表示启用一个标记列 '_merge' 来标记每个行的来源 # 根据标记列的值,添加一个标记结果列 conditions = [ (merged_df['_merge'] == 'left_only'), # 左侧有的数据 (merged_df['_merge'] == 'both'), # 左右两边都有的数据 (merged_df['_merge'] == 'right_only') # 右侧有的数据 ] choices = ['Left only', 'Both', 'Right only'] # 对应上述条件的选择,分别为左侧有的数据、都有的数据、右侧有的数据 merged_df['merge_result'] = np.select(conditions, choices) # 使用 np.select 函数根据条件和选择,在 DataFrame 中添加一个新列 'merge_result',标记为左侧有的数据、都有的数据或右侧有的数据 # 将结果写入到 Excel 文件中 merged_df.to_excel('merged.xlsx', index=False) # 将合并后的结果写入到 Excel 文件 'merged.xlsx' 中,不包含索引列