pandas: .equals 应该计算为 True?
pandas: .equals should evaluate to True?
我有 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
一种可能性是在 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
我有 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
一种可能性是在 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