比较两个来自csv的pandas数据框架。

问题描述 投票:0回答:1

我有2个csv文件,我需要用pandas来比较它们。这两个文件中的值是相同的,所以我希望df的结果是空的,但它显示给我他们是不同的。你认为我在读取csv文件时漏掉了什么吗? 或者有其他需要测试修正的地方吗?

df1=pd.read_csv('apc2019.csv', sep = '|', lineterminator=True)
df2=pd.read_csv('apc2020.csv', sep = '|', lineterminator=True)
df = pd.concat([df1,df2]).drop_duplicates(keep=False)
print(df)
pandas concat drop-duplicates
1个回答
1
投票

我建议先找到什么是不同的,但这是很难用的 pd.equals 因为它只会给你一个 TrueFalse你可以试试这个吗?

from pandas._testing import assert_frame_equal

assert_frame_equal(df1, df2) 

这将告诉你确切的区别,而且它有不同程度的 "容忍度"(例如,如果你不关心列名、类型等)。

详细内容 此处

如果你想在数值上与公差比较。

In [20]: from pandas._testing import assert_frame_equal 
    ...: df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4], 'c': [1, 9]}) 
    ...: df2 = pd.DataFrame({'a': [1, 2], 'b': [3, 5], 'c': [1.5, 8.5]})                                                                                                                                                                                                       

In [21]: assert_frame_equal(df1, df2, check_less_precise=-1, check_dtype=False)    

通过defaut chekc_dtype 是True,所以如果你有floats和ints,它将引发一个异常。

另一个需要改变的参数是 check_less_precise 通过使用负数,你会使允许的误差变大。

© www.soinside.com 2019 - 2024. All rights reserved.