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

时间:2017-08-02 06:08:06

标签: python excel compare

为简单起见,假设数据文件看起来像这样,按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)和Deletes(第一个文件中的ID在第二个文件中不存在)

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

我建议您阅读一些excellent introductions到熊猫的内容,了解其工作原理和原因,并根据您的具体需求进行调整

读取excel文件

pandas.read_excel

pandas.DataFrame

df1和df2应为ID s,indexcolumns,第一行为df_merged = pd.merge(df1, df2, left_index=True, right_index=True, how='outer', sort=False, indicator=True) 或标题

合并文件

pandas.merge

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

这为您提供了更改的列表(或{{1}}),您可以根据需要进行格式化

相关问题