Skip to main content
`Ctrl`+`K`

# 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=<no_default>, check_flags=True, rtol=<no_default>, atol=<no_default>, obj='DataFrame')

  Check that left and right DataFrame are equal.

  This function is intended to compare two DataFrames and output any differences. It is mostly intended for use in unit tests. Additional parameters allow varying the strictness of the equality checks performed.

  Parameters:
    left DataFrame

      First DataFrame to compare.

    right DataFrame

      Second DataFrame to compare.

    check_dtype bool, default True

      Whether to check the DataFrame dtype is identical.

    check_index_type bool or {‘equiv’}, default ‘equiv’

      Whether to check the Index class, dtype and inferred_type are identical.

    check_column_type bool or {‘equiv’}, default ‘equiv’

      Whether to check the columns class, dtype and inferred_type are identical. Is passed as the `exact` argument of `assert_index_equal()`.

    check_frame_type bool, default True

      Whether to check the DataFrame class is identical.

    check_names bool, default True

      Whether to check that the names attribute for both the index and column attributes of the DataFrame is identical.

    by_blocks bool, default False

      Specify how to compare internal data. If False, compare by columns. If True, compare by blocks.

      Deprecated since version 3.1.

    check_exact bool, default False

      Whether to compare number exactly. If False, the comparison uses the relative tolerance (`rtol`) and absolute tolerance (`atol`) parameters to determine if two values are considered close, according to the formula: `|a - b| <= (atol + rtol * |b|)`.

      Changed in version 2.2.0: Defaults to True for integer dtypes if none of `check_exact`, `rtol` and `atol` are specified.

      Changed in version 3.0.0: When `check_exact=True`, the comparison of object-dtype values containing nested `numpy.ndarray` objects takes the type of the nested object into account. In particular, a nested `numpy.ndarray` is not considered equivalent to a Python `list`, Python `tuple`, or a pandas `ExtensionArray` merely because the contained values are the same.

    check_datetimelike_compat bool, default False

      Compare datetime-like which is comparable ignoring dtype.

      Deprecated since version 3.0.

    check_categorical bool, default True

      Whether to compare internal Categorical exactly.

    check_like bool, default False

      If True, ignore the order of index & columns. Note: index labels must match their respective rows (same as in columns) - same labels must be with the same data.

    check_freq bool, default True

      Whether to check the freq attribute on a DatetimeIndex or TimedeltaIndex index or columns. These checks are skipped if `check_like=True`.

      Deprecated since version 3.1.0: The `freq` attribute of `DatetimeIndex`/`TimedeltaIndex` columns is not yet checked by default; a mismatch currently only warns and will raise in a future version. Pass `check_freq` explicitly to silence the warning.

    check_flags bool, default True

      Whether to check the flags attribute.

    rtol float, default 1e-5

      Relative tolerance. Only used when check_exact is False.

    atol float, default 1e-8

      Absolute tolerance. Only used when check_exact is False.

    obj str, default ‘DataFrame’

      Specify object name being compared, internally used to show appropriate assertion message.

  See also

  `assert_series_equal`

    Equivalent method for asserting Series equality.

  `DataFrame.equals`

    Check DataFrame equality.

  Examples

  This example shows comparing two DataFrames that are equal but with columns of differing dtypes.

      >>> 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 equals itself.

      >>> assert_frame_equal(df1, df1)

  df1 differs from df2 as column ‘b’ is of a different type.

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

  Attribute “dtype” are different [left]: int64 [right]: float64

  Ignore differing dtypes in columns with check_dtype.

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