pandas.testing.assert_frame_equal#

pandas.testing.assert_frame_equal(left, right, check_dtype=True, check_index_type='equiv', check_column_type='equiv', check_frame_type=True, check_names=True, by_blocks=False, check_exact=<no_default>, check_datetimelike_compat=False, check_categorical=True, check_like=False, check_freq=True, check_flags=True, rtol=<no_default>, atol=<no_default>, obj='DataFrame')[源代码][源代码]#

检查左和右 DataFrame 是否相等。

此函数旨在比较两个 DataFrame 并输出任何差异。它主要用于单元测试。其他参数允许改变执行的相等性检查的严格性。

参数:
DataFrame

第一个要比较的 DataFrame。

DataFrame

要比较的第二个 DataFrame。

check_dtype布尔值, 默认为 True

是否检查 DataFrame 的 dtype 是否相同。

check_index_type布尔值或 {‘equiv’},默认 ‘equiv’

是否检查 Index 类、dtype 和 inferred_type 是否相同。

check_column_type布尔值或 {‘equiv’},默认 ‘equiv’

是否检查列的类、dtype 和 inferred_type 是否相同。作为 exact 参数传递给 assert_index_equal()

check_frame_type布尔值, 默认为 True

是否检查 DataFrame 类是否相同。

check_names布尔值, 默认为 True

是否检查 indexcolumn 属性的 names 属性在 DataFrame 中是否相同。

by_blocks布尔值, 默认为 False

指定如何比较内部数据。如果为 False,按列比较。如果为 True,按块比较。

check_exact布尔值, 默认为 False

是否完全比较数字。如果为 False,比较使用相对容差 (rtol) 和绝对容差 (atol) 参数来确定两个值是否被认为是接近的,根据公式:|a - b| <= (atol + rtol * |b|)

在 2.2.0 版本发生变更: 如果没有指定 check_exactrtolatol,则对于整数数据类型,默认值为 True。

check_datetimelike_compat布尔值, 默认为 False

比较类似日期时间的对象,忽略数据类型进行比较。

check_categorical布尔值, 默认为 True

是否完全比较内部类别。

check_like布尔值, 默认为 False

如果为真,忽略索引和列的顺序。注意:索引标签必须与其对应的行匹配(与列相同)——相同的标签必须与相同的数据匹配。

check_freq布尔值, 默认为 True

是否检查 DatetimeIndex 或 TimedeltaIndex 上的 freq 属性。

check_flags布尔值, 默认为 True

是否检查 flags 属性。

rtolfloat, 默认 1e-5

相对容差。仅在 check_exact 为 False 时使用。

atolfloat, 默认 1e-8

绝对容差。仅在 check_exact 为 False 时使用。

objstr, 默认 ‘DataFrame’

指定正在比较的对象名称,内部用于显示适当的断言消息。

参见

assert_series_equal

断言 Series 相等的等效方法。

DataFrame.equals

检查 DataFrame 的相等性。

示例

这个例子展示了比较两个相等但列的数据类型不同的DataFrame。

>>> from pandas.testing import assert_frame_equal
>>> df1 = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
>>> df2 = pd.DataFrame({"a": [1, 2], "b": [3.0, 4.0]})

df1 等于其自身。

>>> assert_frame_equal(df1, df1)

df1 与 df2 不同,因为列 ‘b’ 的类型不同。

>>> assert_frame_equal(df1, df2)
Traceback (most recent call last):
...
AssertionError: Attributes of DataFrame.iloc[:, 1] (column name="b") are different

属性 “dtype” 不同 [左边]: int64 [右边]: float64

使用 check_dtype 忽略列中不同的 dtypes。

>>> assert_frame_equal(df1, df2, check_dtype=False)