如何解决谁能建议更好的ASSERT方法在pytest中比较单个数据帧的两列?
我正在使用 pytest 来比较数据框的两列
通过使用下面的assert
方法
def test_compare():
np.testing.assert_almost_equal(v['col1'].values,v['col2'].values,decimal=4,verbose=True)
但是此assert_almost_equal()
方法的问题是在将col1值(即 0.850341028331584 )(最多4个小数位,即 0.8503 )与col2(即 0.850341028331585)进行比较时(最多4个小数位,即 0.8503 )会引发错误:
> raise AssertionError(msg)
E AssertionError:
E Arrays are not almost equal to 4 decimals
E
E x and y nan location mismatch:
E x: array([0.8503,0.1234,...,0.9028,0.981,0.9789])
E y: array([0.8503,0.9789])
是否存在任何变通方法或其他一些断言函数,它们仅严格比较小数点后4位而不是四舍五入。
解决方法
您可以尝试以相对宽容的方式使用pandas方法assert_series_equal-似乎对我有用:
>>> import pandas as pd
>>> df = pd.DataFrame([[0.850341028331584,0.850341028331585]])
>>> df
0 1
0 0.850341 0.850341
>>> df[0][0]
0.850341028331584
>>> df[1][0]
0.850341028331585
>>> pd.testing.assert_series_equal(df[1].rename(0),df[0],check_exact=False,rtol=4)
>>>
不幸的是,为了使此功能起作用,您必须将第一个系列重命名为与第二个系列具有相同的名称。有一个与此相关的closed issue。
,在这些情况下,您可以使用np.isclose
,在这种情况下可以根据需要控制精度
assert np.all(np.isclose(v['col1'].values,v['col2'].values))
,
如果您想使用assert方法严格将数据比较到特定小数位,请使用
assert_array_almost_equal(df['col1'],df['col2'],decimal=13,err_msg='',verbose=True)
此方法在不执行默认四舍五入的情况下工作得很好
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。