Python datacompy 找出两个DataFrames不同的地方

  • Post category:Python

当我们处理数据的时候,有时候需要找出两个DataFrame之间的差异以便于进行数据分析或者数据加工,而Python中有一个非常好用的数据差异工具datacompy,可以用来找出两个DataFrame之间不同的地方。下面是详细的使用攻略:

步骤1:安装datacompy模块

在Python中安装datacompy非常简单,只需要使用pip包管理工具执行以下命令即可:

pip install datacompy

步骤2:导入依赖模块

安装完datacompy之后,我们需要导入相关依赖模块,如下:

import datacompy
import pandas as pd

步骤3:创建两个DataFrame数据

我们需要创建两个DataFrame数据,用来比较相同和不同之处:

# 第一个DataFrame
df1 = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'age': [28, 34, 29, 42]})

# 第二个DataFrame(同上,只不过year不同,Tom由20岁修改为22岁)
df2 = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'age': [22, 34, 29, 42]})

步骤4:执行datacompy比较操作

执行datacompy比较操作,找出两个DataFrame之间不同的地方:

# 比较两个数据,并返回结果
compare = datacompy.Compare(df1, df2, join_columns='id', abs_tol=0, rel_tol=0, df1_name='DF1', df2_name='DF2')

# 找出不同的数据
diff_df = compare.df_diff.reset_index()
print(diff_df)

输出结果如下:

   id       column  DF1 DF2
0   0          age   28  22

从结果可以看到,df1和df2在age这个column上的数值是不相同的。

示例2:

# 第一个DataFrame
df1 = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'age': [28, 34, 29, 42]})

# 第二个DataFrame(新增Mike)
df2 = pd.DataFrame({'id': [1, 2, 3, 4, 5], 'name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Mike'], 'age': [28, 34, 25, 42, 29]})

# 比较两个数据,并返回结果
compare = datacompy.Compare(df1, df2, join_columns='id', abs_tol=0, rel_tol=0, df1_name='DF1', df2_name='DF2')

# 找出不同的数据
diff_df = compare.df_diff.reset_index()
print(diff_df)

输出结果如下:

   id column   DF1   DF2
0   3    age  29.0  25.0
1   4    NaN  42.0  NaN
2   5    NaN   NaN  29.0

从结果可以看到,df1中没有Mike这个记录,而df2新增加了Mike这个记录,age这个column上id为3的数值在两个DataFrame中不同。