我有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)
我建议先找到什么是不同的,但这是很难用的 pd.equals
因为它只会给你一个 True
或 False
你可以试试这个吗?
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
通过使用负数,你会使允许的误差变大。