diff --git a/pandas/util/testing.py b/pandas/util/testing.py index 1eedb9e2a8274..089e35e8e93b2 100644 --- a/pandas/util/testing.py +++ b/pandas/util/testing.py @@ -1306,33 +1306,40 @@ def assert_frame_equal(left, right, check_dtype=True, check_categorical=True, check_like=False, obj='DataFrame'): - """Check that left and right DataFrame are equal. + """ + Check that left and right DataFrame are equal. + + This function is intended to compare two DataFrames and output any + differences. Is 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 / string {'equiv'}, default False + check_index_type : {'equiv'} or bool, default 'equiv' Whether to check the Index class, dtype and inferred_type are identical. - check_column_type : bool / string {'equiv'}, default False + check_column_type : {'equiv'} or bool, default 'equiv' Whether to check the columns class, dtype and inferred_type are identical. - check_frame_type : bool, default False + check_frame_type : bool, default True Whether to check the DataFrame class is identical. check_less_precise : bool or int, default False Specify comparison precision. Only used when check_exact is False. 5 digits (False) or 3 digits (True) after decimal points are compared. - If int, then specify the digits to compare + If int, then specify the digits to compare. check_names : bool, default True Whether to check that the `names` attribute for both the `index` and `column` attributes of the DataFrame is identical, i.e. * left.index.names == right.index.names * left.columns.names == right.columns.names - by_blocks : bool, default False Specify how to compare internal data. If False, compare by columns. If True, compare by blocks. @@ -1345,10 +1352,39 @@ def assert_frame_equal(left, right, check_dtype=True, 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 + (same as in columns) - same labels must be with the same data. obj : str, default 'DataFrame' Specify object name being compared, internally used to show appropriate - assertion message + 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.util.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 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) """ # instance validation