【问题标题】:How to use a pandas data frame in a unit test如何在单元测试中使用 pandas 数据框
【发布时间】:2015-03-13 02:32:32
【问题描述】:

我正在开发一组 python 脚本来预处理数据集,然后使用 scikit-learn 生成一系列机器学习模型。我想开发一组单元测试来检查数据预处理功能,并希望能够使用一个小的测试 pandas 数据框,我可以为其确定答案并在断言语句中使用它。

我似乎无法让它加载数据框并将其传递给使用 self 的单元测试。我的代码看起来像这样;

def setUp(self):
    TEST_INPUT_DIR = 'data/'
    test_file_name =  'testdata.csv'
    try:
        data = pd.read_csv(INPUT_DIR + test_file_name,
            sep = ',',
            header = 0)
    except IOError:
        print 'cannot open file'
    self.fixture = data

def tearDown(self):
    del self.fixture

def test1(self):    
    self.assertEqual(somefunction(self.fixture), somevalue)

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

感谢您的帮助。

【问题讨论】:

  • 你是什么意思“你不能得到它”?有错误吗?如果是这样,错误是什么?你希望发生什么,而发生什么?
  • 我没有收到错误,无论我在测试中放置什么,测试都会成功运行。我想要做的是生成测试,这些测试可以测试操纵 pa​​ndas 数据框并使用小型测试数据框确认其行为的函数。
  • 您需要展示一个实际示例,其中包含不起作用的实际数据。
  • 当你使用self时,你必须把这些函数放在一个类中。
  • 感谢您的帮助,我试图获得一个使用嵌入式数据框的示例,但没有运气。明天我将尝试构建课程,看看是否能解决问题。

标签: python pandas python-unittest


【解决方案1】:

Pandas 有一些用于测试的实用程序。

import unittest
import pandas as pd
from pandas.util.testing import assert_frame_equal # <-- for testing dataframes

class DFTests(unittest.TestCase):

    """ class for running unittests """

    def setUp(self):
        """ Your setUp """
        TEST_INPUT_DIR = 'data/'
        test_file_name =  'testdata.csv'
        try:
            data = pd.read_csv(INPUT_DIR + test_file_name,
                sep = ',',
                header = 0)
        except IOError:
            print 'cannot open file'
        self.fixture = data

    def test_dataFrame_constructedAsExpected(self):
        """ Test that the dataframe read in equals what you expect"""
        foo = pd.DataFrame()
        assert_frame_equal(self.fixture, foo)

【讨论】:

【解决方案2】:

如果你使用的是最新的pandas,我觉得下面的方式更干净一些:

import pandas as pd

pd.testing.assert_frame_equal(my_df, expected_df)
pd.testing.assert_series_equal(my_series, expected_series)
pd.testing.assert_index_equal(my_index, expected_index)

如果它们不“相等”,每个函数都会引发AssertionError

更多信息和选项:https://pandas.pydata.org/pandas-docs/stable/reference/general_utility_functions.html#testing-functions

【讨论】:

    【解决方案3】:

    您也可以使用snapshottest 执行类似操作。

    https://stackoverflow.com/a/64070787/3384609

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 2010-10-15
      • 2015-02-10
      • 2019-05-21
      • 2011-10-19
      相关资源
      最近更新 更多