【问题标题】:Assert Two Frames Are Not Equal断言两帧不相等
【发布时间】:2016-08-04 22:16:22
【问题描述】:

我需要测试两个 pandas 数据帧是否相等。 是否有等效于 pandas assert_frame_equal 的函数可以做到这一点?如果不是,那么断言帧不相等的最佳/最安全的方法是什么?

【问题讨论】:

  • 在什么意义上相等?考虑到索引,所有单元格都相等吗?还是它们也必须进行同等排序?
  • @piRSquared 我相信这是在单元测试环境中提出的,例如pandas.util.testing.assert_frame_equal
  • 谢谢@PaulH,这正是上下文。

标签: python unit-testing pandas


【解决方案1】:

您可以编写自己的断言函数,使用assert_frame_equal() 并反转结果:

def assert_frame_not_equal(*args, **kwargs):
    try:
        assert_frame_equal(*args, **kwargs)
    except AssertionError:
        # frames are not equal
        pass
    else:
        # frames are equal
        raise AssertionError

这将使用 assert_frame_equal() 用于比较数据帧的相同逻辑,因此可以避免什么构成相等的问题 - 不相等与 assert_frame_equal() 确定的任何内容正好相反。

【讨论】:

  • 是的,这就是我正在考虑的路线。我很惊讶以前没有解决这个问题。
【解决方案2】:

是的,有:

# Let us suppose you have two dataframes df1 and df2
# Check for equality by using
df1.equals(df2)

使用not 断言它们不相等

【讨论】:

  • 不完全。这将返回一个布尔数据框,而不是一个标量值。因此is_equal = df1.equals(df2) 的真实性意味着assert is_equal 永远不会提高
  • pandas.DataFrame.equals 返回 bool:如果两个对象中的所有元素都相同,则返回 True,否则返回 False。所以这有效(至少对于pandas==0.25.3)。 pandas.DataFrame.eq 返回一个布尔数据框。
【解决方案3】:

对于两个 pandas 数据帧之间的一次性比较,我不希望在 unittest 单元测试中相等,我只是这样做:

import pandas as pd

with self.assertRaises(AssertionError):
    pd.testing.assert_frame_equal(df2, df1)

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 2010-09-29
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多