我有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
答案 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