问题总结
给定 2 个 excel 文件,每个文件大约有 200 列,并且有一个公共索引列 - 即两个文件中的每一行都有一个 name 属性说,生成一个与 excel 文件不同的输出 excel 文件最好是什么2 到 excel 文件 1。差异将定义为文件 2 中的任何新行而不是 file1 中的任何新行,以及 file2 中具有相同索引(名称)但其他一个或多个列不同的行。这里有一个使用 pandas 的很好的例子,它可能很有用:比较 2 个 Excel 文件并输出一个有差异 的 Excel 文件虽然很难将该解决方案应用于具有 200 列的 excel 文件。
示例文件
下面是 2 个 csv 格式的简化(列从 200 减少到 4)excel 文件的示例,索引列是名称。
Name,value,location,Name Copy
Bob,400,Sydney,Bob
Tim,500,Perth,Tim
Name,value,location,Name Copy
Bob,400,Sydney,Bob
Tim,500,Adelaide,Tim
Melanie,600,Brisbane,Melanie
因此,鉴于上述 2 个输入文件,输出文件应为:
Name,value,location,Name Copy
Tim,500,Adelaide,Tim
Melanie,600,Brisbane,Melanie
所以输出文件将有 2 行(不包括列标题行),第 2 行是不在 file1 中的新行,第 1 行包含从 file1 到 file2 的更改。
以下工作,但索引列丢失(它是 [1, 2] 而不是 ['Tim', 'Melanie'] :
import pandas as pd
df1 = pd.read_excel('simple1.xlsx', index_col=0)
df2 = pd.read_excel('simple2.xlsx', index_col=0)
df3 = pd.merge(df1, df2, how='right', sort='False', indicator='Indicator')
df4 = df3.loc[df3['Indicator'] == 'right_only']
df5 = df4.drop('Indicator', axis=1)
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df5.to_excel(writer, sheet_name='Sheet1')
writer.save()