使用 Python 比较两个 excel 文件

Posted

技术标签:

【中文标题】使用 Python 比较两个 excel 文件【英文标题】:Comparing two excel files by using Python 【发布时间】:2019-06-27 20:45:56 【问题描述】:

我有两个 excel 文件中的数据,如下所示

已创建示例 DS:

df1 =  'Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [1, 1, 2]
df1 = pd.DataFrame(df1, columns=df1.keys())

df2 =  'Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [2, 1, 2]
df2 = pd.DataFrame(df2, columns=df2.keys())

请帮助我了解这两个 excel 的不同之处,如下所示。

Transaction_name    Count_df1        Count_df2
SC-001_Homepage          1              2
SC-001_Homepage          1              1
SC-001_Homepage          2              2

输出计数的第一行不匹配。我可以用不同的颜色突出显示吗?示例代码如下

#COmparing both excels
df1 = pd.read_csv(r"WLMOUTPUT.csv", dtype=object)
df2 = pd.read_csv(r"results.csv", dtype=object)

print('\n', df1)
print('\n',df2)

df1['Compare'] = df1['Transaction_Name'] + df1['Count'].astype(str)
df2['Compare'] = df2['Transaction_Name'] + df2['Count'].astype(str)

print('\n', df1.loc[~df1['Compare'].isin(df2['Compare'])])

提前致谢

【问题讨论】:

你必须展示你迄今为止所做的工作的例子。 请找到我迄今为止为实现结果所做的工作#Formatting WLM data data = pd.read_excel(r"Script wise coordinates comparison_edited123.xlsx", sheet_name='WLM', dtype=object ) data = pd.DataFrame(data, columns=data.keys()) df = pd.melt(data, id_vars=['Script_name'], value_name='Count') df['Transaction_Name'] = df['Script_name '] + '_' + df['variable'] Final_df = df[['Transaction_Name', 'Count']] Final_df.to_csv(r'WLMOUTPUT.csv', index=False) 代码在下一条评论中继续进行比较两个 CSV 文件 你必须在你的问题中提供它,你可以编辑它以相应地调整它,你还需要格式化你的文本 @SwethaGorantla 没有人回答的原因是这里的信息太多。我建议您只发布 5-6 行示例数据,以数据框格式描述您尝试实现的目标,以便我们可以复制数据并复制问题以及 2 行解释,您的示例代码(不是完整的,仅有用的位)和预期的输出,仅此而已。 :) 检查this 按说明编辑问题,请检查一次。 【参考方案1】:

您可以使用merge 函数。

import pandas as pd

df1 = pd.DataFrame('Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [1, 1, 2]) 
df2 = pd.DataFrame('Transaction_Name':['SC-001_Homepage', 'SC-002_Homepage', 'SC-001_Signinlink'], 'Count': [2, 1, 2])

merged_df = pd.merge(df1, df2, on = 'Transaction_Name', suffixes=('_df1', '_df2'))

这会给你这个DataFrame:

print(merged_df)

   Count_df1   Transaction_Name  Count_df2
0          1    SC-001_Homepage          2
1          1    SC-002_Homepage          1
2          2  SC-001_Signinlink          2

然后你可以只使用子集来查看哪些行有不同的计数:

diff = merged_df[merged_df['Count_df1'] != merged_df['Count_df2']]

你会得到这个:

print(diff)

   Count_df1 Transaction_Name  Count_df2
0          1  SC-001_Homepage          2

【讨论】:

感谢 Luc Blassel,我可以实现它并获得所需的输出。如果任何交易丢失如何捕获它,您也可以帮助我吗?例如,在 df1 中有 3 个事务和数量,在 df2 中只有 2 个事务和数量。如何找到 df2 中缺少的一笔交易? 您可以在合并 2 个 DataFrame 时指定 outer 选项:merged_df = pd.merge(df1, df2, on = 'Transaction_Name', suffixes=('_df1', '_df2'), how='outer') 然后当其中一个 DF 中缺少事务之一时,它将在 @987654330 中显示为 NaN @。如果这回答了您的问题,请考虑接受它作为答案。 正如你所说,它在丢失的交易中给出了 NaN,它也给出了完整的输出。是否有可能只获取 df2 中缺少的事务名称,如下所示... Transaction_Name Count_df1 Count_df2 0 SC-001_AppLaunch_Signed 0 NaN 从this answer 你可以使用merged_df[merged_df.isnull().any(axis=1)] 获取只有NaN 的行

以上是关于使用 Python 比较两个 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

Python3.7 比较两个Excel文件指定列的值的异同,并将核对结果写入Excel中

Excel文件比较工具的使用

怎样用Beyond Compare比较两个excel表格文件差异

Python通过id值比较两个Excel,其他列中的“归档”输出与ID列有关的新excel差异

用Python读写Excel文件的方式比较

如何使用 Python Pandas 比较两个不同大小的数据集?