我正在使用pd.testing.assert_frame_equal来测试我编写的函数是否按预期工作,我得到了一个奇怪的错误:
当我比较以完全相同的方式打印的2个 Dataframe 时(我检查了np.array_equal(df1.values,df2.values)的值是否相同,所以我知道它们按照人类标准是相同的),它给了我一个Assert错误:
DataFrame.index values are different (90.0 %)
[left]: Int64Index([0, 3, 6, 9, 12, 15, 18, 1, 4, 7, 10, 13, 16, 19, 2, 5, 8, 11, 14,
17],
dtype='int64')
[right]: RangeIndex(start=0, stop=20, step=1)
其中左是函数返回的 Dataframe ,右是我为测试创建的 Dataframe 。
这里有两个错误。首先,索引的类型不相等,这很奇怪,但可以通过执行以下操作轻松解决:
right.index = list(right.index)
如here所示。第二个问题是左索引的顺序,因为在将该行代码添加到测试中之后,它仍然返回以下错误:
DataFrame.index values are different (90.0 %)
[left]: Int64Index([0, 3, 6, 9, 12, 15, 18, 1, 4, 7, 10, 13, 16, 19, 2, 5, 8, 11, 14,
17],
dtype='int64')
[right]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
19],
dtype='int64')
我正在测试的函数将数据框拆分成组,melts其中的一些,然后joins所有的数据框重新组合在一起。
我在函数内部使用sort_index来保持索引的有序性(它们应该是有序的),但是在我所做的打印中,它们在测试错误中显示为有序的(0,1,2,3...),正如你所看到的,它们不是有序的。
我也试过使用reindex和reset_index,但它们没有显示出任何区别(也许有一些隐藏的选项我没有尝试过,谁知道呢?)
最后一个问题是:我如何对DataFrame的索引进行排序,以便测试通过?
当在正确的文件和函数中使用时,sort_index允许测试通过
(我在改变一个副本,而不是正确的功能...)
2条答案
按热度按时间sirbozc51#
我无法在pandas 2.0.0+上复制您的问题
wsxa1bj12#
如果在测试的函数中正确使用了sort_index,它就会通过测试。
如果你修改了其他文件中的其他函数,你并没有改进你正在测试的函数,所以它不会通过测试