如何在Python单元测试中使用assert方法比较两个数据框?

4
我正在为一个返回数据框的方法编写单元测试,但是在使用以下代码测试输出时: self.assertEquals(mock_df, result) 我得到了ValueError的错误信息: ValueError: DataFrame的真值是不明确的。请使用a.empty,a.bool(),a.item(),a.any()或 a.all()。 目前,我正在比较服务于当前目的的属性。
self.assertEqual(mock_df.size, result.size)
self.assertEqual(mock_df.col_a.to_list(), result.col_a.to_list())
self.assertEqual(mock_df.col_b.to_list(), result.col_b.to_list())
self.assertEqual(mock_df.col_c.to_list(), result.col_c.to_list())

但我很好奇如何断言数据框。

2个回答

4
import unittest
import pandas as pd

class TestDataFrame(unittest.TestCase):
    def test_dataframe(self):
        df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
        df2 = pd.DataFrame({'a': [1, 2], 'b': [3.0, 4.0]})
        self.assertEqual(True, df1.equals(df2))

if __name__ == '__main__':
    unittest.main()

谢谢,Mahi,虽然在某些情况下它是有效的。但是有一些情况下我会得到“AssertionError”,尽管数据在视觉上看起来相同并且已经正确索引。 - AkshayJain
我也遇到了这种方法不起作用的问题。我找到了一种替代方法,成功地发布了另一个答案。 - BioData41
我认为你可以稍微简化一下,使用self.assertTrue(df1.equals(df2))。 - Yaoyu Yang

2

@Mahi的被接受的答案对我无效。它在两个应该相等的数据帧上失败了。不确定为什么。

正如我在这里发现的,在“DataFrame equality”下,Pandas内置了一些用于测试的函数。

以下方法适用于我。我测试了几次,但不是详尽无遗地测试,以确保它能够重复工作。

import unittest
import pandas as pd

class test_something(unittest.TestCase):
    def test_method(self):
        #... create dataframes df1 and df2...
        pd.testing.assert_frame_equal(df1,df2)

这里是有关上述函数的相关pandas参考资料。


assert_frame_equal 适用于测试。如果测试失败,它还会显示两个数据框之间的差异。 - Juha Palomäki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接