为简单起见,假设数据文件如下所示,按 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.DataFrame
s,其中ID
为index
,第一行为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
(,您可以根据需要设置格式