pandas:.equals应该评估为True?

时间:2017-05-19 18:00:11

标签: pandas equality

我有2个pandas DataFrames看起来完全一样。但是,当我使用.equals方法进行测试时,我得到False。知道潜在的不一致可能是什么?有什么我不检查的吗?

print(df1.values.tolist()==df2.values.tolist())
print(df1.columns.tolist()==df2.columns.tolist())
print(df1.index.tolist()==df2.index.tolist())
print(df1.equals(df2))

# True
# True
# True
# False

1 个答案:

答案 0 :(得分:3)

一种可能性是在python-space中评估为相等的不同数据类型,例如

df1 = pd.DataFrame({'a': [1, 2.0, 3]})

df2 = pd.DataFrame({'a': [1,2,3]})

df1.values.tolist() == df2.values.tolist()
Out[45]: True

df1.equals(df2)
Out[46]: False

要追查这一点,您可以使用assert_frame_equal功能。

from pandas.testing import assert_frame_equal

assert_frame_equal(df1, df2)
AssertionError: Attributes are different

Attribute "dtype" are different
[left]:  float64
[right]: int64

0.20.1之前的pandas版本中,导入为from pandas.util.testing import assert_frame_equal