【问题标题】:assert_frame_equal export dataframes and diff on failed assertionassert_frame_equal 导出数据帧和失败断言的差异
【发布时间】:2020-09-08 17:00:00
【问题描述】:

我正在测试多个数据帧的相等性。

pd.testing.assert_frame_equal(
            df_py, df_mat, check_dtype=False, check_less_precise=True)

我想在断言失败时导出数据帧。 如何捕捉它?

如果我也可以将断言检查的结果保存在两个数据帧形状相同的对象中,那就太好了。我相信这看起来像一个数据框,每个比较元素都有布尔 True/False。

【问题讨论】:

    标签: python pandas assertion


    【解决方案1】:

    我想在断言失败时导出数据帧。如何捕捉它?

    try-except on AssertionError,然后对数据框做任何你想做的事情

    如果我也可以将断言检查的结果保存在两个数据帧形状相同的对象中,那就太好了。我相信这看起来像一个数据框,每个比较元素都有布尔 True/False。

    没有一种优雅的方式可以实现这一目标。使用assert_frame_equal 无法做到这一点。您可以使用df1 == df2,但这并不像assert_frame_equal 提供的比较和报告那么复杂。例如,当且仅当两个数据框具有相同的形状相同的列名时,它才有效。

    如果您使用的是测试框架,您可能需要使用 raise 重新引发异常,以便将测试标记为失败。

    import pandas as pd
    
    df1 = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
    df2 = pd.DataFrame({'a': [1, 3], 'b': [3, 5]})
    try:
        pd.testing.assert_frame_equal(df1, df2, check_dtype=False, check_less_precise=True)
    except AssertionError as e:
        print(e)
        print(df1 == df2)
        raise
    

    上面会输出

    DataFrame.iloc[:, 0] (column name="a") are different
    
    DataFrame.iloc[:, 0] (column name="a") values are different (50.0 %)
    [index]: [0, 1]
    [left]:  [1, 2]
    [right]: [1, 3]
           a      b
    0   True   True
    1  False  False
    

    最后的手段是手动迭代并比较两个数据框中的每个值,但随后您需要确定输出的外观。

    【讨论】:

    • 感谢您的回答。它可以工作,但是捕获异常会使测试通过(我正在使用 pytest)。是否有任何修复程序仍将其标记为失败?
    • @Gio 是的,只需在 except 块中添加 raise
    【解决方案2】:

    能不能像处理异常一样简单?

    import traceback
    try:
        assert_frame_equal(df1,df2)
    except AssertionError:
        df1.to_csv('df1.csv', index=False)
        df2.to_csv('df2.csv', index=False)
        with open('traceback.txt', 'w') as f:
            f.write(traceback.format_exc())
    

    【讨论】:

    • 感谢您的回答。它可以工作,但是捕获异常会使测试通过(我正在使用 pytest)。是否有任何修复程序仍将其标记为失败?
    猜你喜欢
    • 2022-01-13
    • 2015-07-07
    • 2011-05-27
    • 2011-09-16
    • 2018-07-30
    • 1970-01-01
    • 2020-03-11
    • 2011-05-27
    相关资源
    最近更新 更多