考虑下面的测试,它的目的是在给定容差的情况下检测两个矩阵之间的任何差异。
import pandas as pd
def test_two_cubes_linewise() -> None:
df1 = pd.DataFrame({"A": [1, 2, 3, 4, 5.0], "B": [4, 5, 6, 7, 8.0001]})
df2 = pd.DataFrame({"A": [97, 98, 3, 4, 5], "B": [99, 5, 6, 7, 8.0002]})
pd.testing.assert_frame_equal(df1, df2, rtol=1e-3, check_dtype=False)
字符串
pandas.testing.assert_frame_equal()可以完美地实现这一点。df 1和df 2之间有几个不同之处:
5
和5.0
是不同的数据类型。1
不等于97
。2
不等于98
。4
不等于99
。8.0001
不等于8.0002
。
由于最后一个差异低于容差,assert语句只检测其他差异-正如所希望的那样。然而,当我运行测试时,Assert错误消息只显示第一个差异:
x1c 0d1x的数据
对于如何访问这些差异的信息,有什么建议吗?
1条答案
按热度按时间qq24tv8q1#
首先,你不需要自己处理任何异常。
让我们来看看assert_frame_equal签名:
字符串
正如你所看到的,它默认设置为
check_dtype=True
,这会阻止其他检查的发生。我建议修改你的代码如下:型
更改包括向测试传递一个布尔标志,因此我们可以轻松地从check_dtype=[True -> False]测试switch。有关更多详细信息,请参阅pytest文档https://docs.pytest.org/en/7.3.x/how-to/parametrize.html
然后你可以运行
pytest --no-header
型
您可能需要检查其他标志以获得更好的结果。