这是「活用数据」的第 11 篇原创文章

主要介绍如何通过DeepDiff实现两个Excel文件数据的快速对比。

对于日常办公中需要处理数据的同学来说,有时候需要对比两个Excel表格(或者是数据库)的数据是否完全相同。

对于简单少量的数据,我们当然可以人工肉眼对比,但是如果数据量一大,那么最好还是借助工具实现。

这篇文章主要通过使用DeepDiff库,介绍了一种简单地对比两个Excel文件是否完全相同的方法。

首先,我们需要下载DeepDiff库:

pip install deepdiff

接着再进行导入:

from deepdiff import DeepDiff

DeepDiff简单使用

接下来我们创建4个简单的Excel数据,方便后续对比,通过pandas读取数据:

import pandas as pd

df1 = pd.read_excel('data1.xlsx')
df2 = pd.read_excel('data2.xlsx')
df3 = pd.read_excel('data3.xlsx')
df4 = pd.read_excel('data4.xlsx')

4个Excel表格数据如下:
data1

data2

data3

data4

上面4个简单示例数据中,我们可以非常明显地看出来,data1跟data2时完全一致的,而data3跟data4只是数据的行顺序跟列顺序不一致,其本质上还是一致的,在我们实际工作中,我们希望的出来的结果也是data3跟data4是一致的。

首先,我们直接对两个不一样的DataFrame进行对比:

对比结果为{},这在DeepDiff中是表示没有差异的意思,但是,这个结果显然不符合实际,因为我们的data1跟data3其实是完全不一样的才对。

这是因为DeepDiff并不支持DataFrame对象的比较。

为了能够使用DeepDiff,我们可以把DataFrame对象转成字典对象。

可以看到,转成字典之后我们成功地对data1和data2进行比较,并给出了正确的结果:

为了验证,我们再拿data1和data3进行比较:

很明显,这两个对象是有区别的,没有任何问题。

接下来进入我们的重头戏,对比data3和data4,为了对比这两个对象,我们可以先把数据转成列表,然后再设置DeepDiff中的ignore_order参数忽略字典元素的顺序:

可以看到,结果非常简单完美地实现了我们的对比需求。

本文小结

本文只是对DeepDiff的使用场景进行了简单介绍,实际上基于这个Python库,我们还可以实现诸如JSON文件对比、数据库数据对比等拓展操作。

本文完整示例代码及文件可关注公众号,回复“python”获取。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐