如何忽略 pandas assert frame equal 的索引比较

新手上路,请多包涵

我尝试比较以下两个将“check_index_type”设置为 False 的数据框。根据文档,如果设置为 False,则不应“检查 Index 类、dtype 和 inferred_type 是否相同”。我误解了文档吗?如何比较忽略索引并为以下测试返回 True?

我知道我可以重置索引但不想这样做。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.testing.assert_frame_equal.html

 from pandas.util.testing import assert_frame_equal
import pandas as pd
d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
assert_frame_equal(d1, d2, check_index_type=False)

AssertionError: DataFrame.index are different
DataFrame.index values are different (50.0 %)
[left]:  Int64Index([0, 2], dtype='int64')
[right]: Int64Index([0, 1], dtype='int64')

原文由 Lisa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

索引是数据框的一部分,如果索引不同,我们应该说数据框不同,即使 dfs 的值相同,所以,如果你想检查值,使用 array_equal from numpy

 d1 = pd.DataFrame([[1,2], [10, 20]], index=[0,2])
d2 = pd.DataFrame([[1, 2], [10, 20]], index=[0, 1])
np.array_equal(d1.values,d2.values)
Out[759]: True

有关 assert_frame_equalgit 中的更多信息

原文由 BENY 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你真的不关心索引是否相等,你可以按如下方式删除索引:

 assert_frame_equal(d1.reset_index(drop=True), d2.reset_index(drop=True))

原文由 The Aelfinn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题