你如何单元测试Python DataFrames

Cod*_*123 34 unit-testing numpy dataframe pandas

我如何单元测试python数据帧?

我有一些输入和输出作为数据帧的函数.几乎我所有的功能都是这样做的.现在,如果我想进行单元测试,那么最好的方法是什么?为每个函数创建一个新的数据框(填充值)似乎有点费力?

你有什么材料可以推荐我吗?你应该为这些功能编写单元测试吗?

小智 25

虽然Pandas的测试功能主要用于内部测试,但NumPy包含一组非常有用的测试功能,这些功能在此处记录:NumPy测试支持.

这些函数比较了NumPy数组,但您可以使用该values属性获得构成Pandas数据框架的数组.您可以定义一个简单的数据框,并将您的函数返回到您期望的内容.

您可以使用的一种技术是为许多函数定义一组测试数据.这样,您可以使用Pytest Fixtures定义该数据框一次,并在多个测试中使用它.

在资源方面,我发现这篇关于使用NumPy和Pandas进行测试的文章非常有用.我还在今年的PyCon Canada上做了关于数据分析测试的简短介绍:自动化您的数据分析测试.

  • PyData London 2019,有关该主题的精彩视频。https://www.youtube.com/watch?v=WTj6T0QdHHM&t=4432s (2认同)

Moh*_* ah 8

你可以使用pandas测试功能:

它将提供更多的灵活性,以便以不同的方式将您的结果与计算结果进行比较.

例如:

df1=pd.DataFrame({'a':[1,2,3,4,5]})
df2=pd.DataFrame({'a':[6,7,8,9,10]})

expected_res=pd.Series([7,9,11,13,15])
pd.testing.assert_series_equal((df1['a']+df2['a']),expected_res,check_names=False)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此链接


ech*_*cho 7

如果你使用 pytest,pandasSnapshot将会很有用。

# use with pytest
import pandas as pd
from snapshottest_ext.dataframe import PandasSnapshot

def test_format(snapshot):
    df = pd.DataFrame([['a', 'b'], ['c', 'd']],
                      columns=['col 1', 'col 2'])
    snapshot.assert_match(PandasSnapshot(df))
Run Code Online (Sandbox Code Playgroud)

一大缺点是快照不再可读。(将内容存储为 csv 更具可读性,但存在问题。

PS:我是 pytest 快照扩展的作者。