昨天在外网找到一个比较dataframe的好库,叫datacompy,它的优点有:

1、可以把对比后的信息详情打印出来,比如列是否相等,行是否相等;

2、在数据中如果有不相等列,那么就只比较相同的列;

3、可以设置绝对差值和相对差值,比如我们比较有浮点数的数据时,设置下绝对差值为0.01,后面的一系列微小的值就忽略了;

4、在数据报告中,每一列的数据类型、不相等数量、最大差值和空值都详细列出来了;

5、可以把不相等的列单独取出来,取出来就是一个dataframe,可以查看具体哪些是不一样的;

下面这张图就是比较之后的报告:

代码如下:

import datacompy, pandas as pd, sys
 
files = []
try:
    files = [sys.argv[1], sys.argv[2]]
except:
    print('命令行未检测到文件参数。')
# 这个方式可以通过命令行运行:
#   
#   python3 cmpfiles.py testfile1.txt testfile2.txt
# 
# 上面自带的两个参数,就是通过  sys.argv 获得的。
 
if len(files) == 0:
    files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_new.csv']
    # files = ['./TempFiles/temp_77.csv', './TempFiles/temp_77_copy.csv']
# 如果直接运行这个脚本,那么用西面定义的 files
 
df1 = pd.read_csv(files[0])
df2 = pd.read_csv(files[1])
 
 
compare = datacompy.Compare(df1, df2, join_columns='key')
# Compare 参数:
#   df1: 数据框1
#   df2: 数据框2
#   join_columns: 指定索引的列名,默认“None”,可以传入数组,比如:['key', 'AdID']
#   on_index: 是否要开启索引,开启之后不需要指定 join_columns,默认“False”
#   abs_tol: 绝对公差,默认“0”
#   rel_tal: 相对公差,默认“0”
#   df1_name: 报告中数据框1的名字,默认“df1”
#   df2_name: 报告中数据框2的名字,默认“df2”
#   ignore_spaces: 是否忽略空格,默认“False”
#   ignore_case: 是否忽略大小写,默认“False”
 
 
print(compare.matches()) # 最后判断是否相等,返回 bool
print(compare.report()) # 打印报告详情,返回 string
# print(compare.sample_mismatch('用户数')) # 取出不相同的某一列数据,返回 dataframe

任何程序错误,以及技术疑问或需要解答的,请添加

Logo

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

更多推荐