diff --git a/pandas/_testing/asserters.py b/pandas/_testing/asserters.py index 98343148bdad1..1544550c1995f 100644 --- a/pandas/_testing/asserters.py +++ b/pandas/_testing/asserters.py @@ -279,8 +279,7 @@ def _get_ilevel_values(index, level): right = safe_sort_index(right) # MultiIndex special comparison for little-friendly error messages - if left.nlevels > 1: - left = cast(MultiIndex, left) + if isinstance(left, MultiIndex): right = cast(MultiIndex, right) for level in range(left.nlevels): @@ -303,7 +302,7 @@ def _get_ilevel_values(index, level): _check_types(left.levels[level], right.levels[level], obj=obj) # skip exact index checking when `check_categorical` is False - if check_exact and check_categorical: + elif check_exact and check_categorical: if not left.equals(right): mismatch = left._values != right._values diff --git a/pandas/tests/indexes/multi/test_setops.py b/pandas/tests/indexes/multi/test_setops.py index fd0928b82ecbf..147247d23c2c6 100644 --- a/pandas/tests/indexes/multi/test_setops.py +++ b/pandas/tests/indexes/multi/test_setops.py @@ -558,6 +558,8 @@ def test_union_with_missing_values_on_both_sides(nulls_fixture): mi2 = MultiIndex.from_arrays([[1, nulls_fixture, 3]]) result = mi1.union(mi2) expected = MultiIndex.from_arrays([[1, 3, nulls_fixture]]) + # We don't particularly care about having levels[0] be float64, but it is + expected = expected.set_levels([expected.levels[0].astype(np.float64)]) tm.assert_index_equal(result, expected)