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
是否检查 index 和 column 属性的 names 属性在 DataFrame 中是否相同。
- by_blocks布尔值, 默认为 False
指定如何比较内部数据。如果为 False,按列比较。如果为 True,按块比较。
- check_exact布尔值, 默认为 False
是否完全比较数字。如果为 False,比较使用相对容差 (
rtol
) 和绝对容差 (atol
) 参数来确定两个值是否被认为是接近的,根据公式:|a - b| <= (atol + rtol * |b|)
。在 2.2.0 版本发生变更: 如果没有指定
check_exact
、rtol
和atol
,则对于整数数据类型,默认值为 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)