如何在python unittest中使用assert方法比较两个数据帧



我正在为一个返回数据帧的方法编写unittest,但是,在使用

测试输出时:self.asserEquals(mock_df, result)

我得到ValueError:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or 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())

但是很好奇如何断言数据框架

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接受的答案对我不起作用。对于两个应该相等的数据帧,它失败了。不知道为什么。

正如我在"DataFrame等式"下发现的,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)

这是熊猫相关的参考上述函数。

最新更新