比较 2 个 Excel 文件并输出一个具有差异的 Excel 文件



为简单起见,假设数据文件如下所示,按 ID 排序:

ID  | Data1  | Data2  | Data3   | Data4
199 |  Tim   |   55   |  work  |  $55
345 |  Joe   |   45   |  work  |  $34
356 |  Sam   |   23   |  uni   |  $12

每个文件有超过 100,000 行和大约 50 列。 我想将第二个文件与第一个文件进行比较,以获取新记录(新 ID(、编辑(ID 匹配但第 2 或 4 列已更改(Data1 和 Data3(和删除(第一个文件中的 ID 在第二个文件中不存在(。

输出将显示在 Excel 文件中,第一列包含 D、E 或 N(用于删除、编辑和新建(,其余列与要比较的文件中的列相同。

对于新记录,完整的新记录将显示在输出文件中。 对于编辑,两条记录都将显示在输出文件中,但仅显示那些已更改的字段。 对于已删除的记录,完整的旧记录将显示在输出文件中。

我还希望在处理文件时将以下输出到屏幕上:

Deletes: D: 199, Tim
Edits:   E: 345, Joe -> John
E: 345, work -> xxx
New:     N: 999, Ami

谢谢。

我建议您阅读一些关于熊猫的优秀介绍,以了解它是如何以及为什么工作的,并使其适应您的特定需求

读取 excel 文件

pandas.read_excel

import pandas as pd
filename1 = 'filename1.xlsx'
filename2 = 'filename2.xlsx'
df1 = pd.read_excel(filename1, index_col=0)
df2 = pd.read_excel(filename2, index_col=0)

DF1 和 DF2 应pandas.DataFrames,其中IDindex,第一行为columns或标题

合并文件

pandas.merge

df_merged = pd.merge(df1, df2, left_index=True, right_index=True, how='outer', sort=False, indicator=True)

选择更改

id_new = df_merged.index[df_merged['_merge'] == 'right_only'] 
id_deleted = df_merged.index[df_merged['_merge'] == 'left_only'] 
id_changed_data1 = df_merged.index[(df_merged['_merge'] == 'both') & (df_merged['Data1_x'] != df_merged['Data1_y'])]
id_changed_data3 = df_merged.index[(df_merged['_merge'] == 'both') & (df_merged['Data3_x'] != df_merged['Data3_y'])]

这为您提供了更改的列表(或更确切地说是Index(,您可以根据需要设置格式

相关内容

  • 没有找到相关文章

最新更新