Cod*_*123 34 unit-testing numpy dataframe pandas
我如何单元测试python数据帧?
我有一些输入和输出作为数据帧的函数.几乎我所有的功能都是这样做的.现在,如果我想进行单元测试,那么最好的方法是什么?为每个函数创建一个新的数据框(填充值)似乎有点费力?
你有什么材料可以推荐我吗?你应该为这些功能编写单元测试吗?
小智 25
虽然Pandas的测试功能主要用于内部测试,但NumPy包含一组非常有用的测试功能,这些功能在此处记录:NumPy测试支持.
这些函数比较了NumPy数组,但您可以使用该values属性获得构成Pandas数据框架的数组.您可以定义一个简单的数据框,并将您的函数返回到您期望的内容.
您可以使用的一种技术是为许多函数定义一组测试数据.这样,您可以使用Pytest Fixtures定义该数据框一次,并在多个测试中使用它.
在资源方面,我发现这篇关于使用NumPy和Pandas进行测试的文章非常有用.我还在今年的PyCon Canada上做了关于数据分析测试的简短介绍:自动化您的数据分析测试.
你可以使用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)
有关详细信息,请参阅此链接
如果你使用 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 快照扩展的作者。
| 归档时间: |
|
| 查看次数: |
12617 次 |
| 最近记录: |