我想在断言失败时导出数据帧。如何捕捉它?
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
最后的手段是手动迭代并比较两个数据框中的每个值,但随后您需要确定输出的外观。