使用pytest测试Pandas时,如何查看导致失败的差异行?
解决pytest中assert_frame_equal显示差异行的问题
pandas.testing.assert_frame_equal()本身就有参数可控制差异显示细节,结合pytest的输出参数就能直接看到差异行:
1. 调整pandas的assert_frame_equal参数
- 设置
verbose=True:这个参数会让pandas输出详细的差异信息,包括具体的行索引、对应列的数值差异,无需额外编写逐行对比代码。 - 配合容差参数(可选):如果不需要严格精确匹配,用
rtol(相对容差)和atol(绝对容差)设置允许的误差范围,避免因浮点精度问题误报差异。 - 示例代码:
import pandas as pd from pandas.testing import assert_frame_equal def test_dataframe_match(): df_expected = pd.DataFrame({'A': [1, 2, 3], 'B': [10, 20, 30]}) df_actual = pd.DataFrame({'A': [1, 2, 4], 'B': [10, 21, 30]}) assert_frame_equal(df_expected, df_actual, verbose=True, rtol=1e-3)
运行后会直接提示差异行的索引(比如示例中的索引2和1)以及具体数值差异。
2. 结合pytest的详细输出参数
运行pytest时加上-v( verbose模式)或-vv(更详细模式),能让测试输出包含更多上下文细节,和pandas的verbose=True配合,差异行的信息会更清晰直观。
3. 可选:关闭数据类型检查(按需使用)
如果你的测试允许数据类型存在差异但数值正确,可以加上check_dtype=False,避免因类型问题掩盖数值差异的显示,让输出聚焦于行值的不同。
内容的提问来源于stack exchange,提问作者scotscotmcc
相关产品推荐
相关产品推荐

