Skip to content

Commit

Permalink
REGR: assert_index_equal raising with non matching pd.NA (pandas-dev#…
Browse files Browse the repository at this point in the history
…48608)

* REGR: assert_index_equal raising with non matching pd.NA

* Fix gh ref

* Fix

* Fix ci

* Move whatsnew

* Fix categorical
  • Loading branch information
phofl authored and noatamir committed Nov 9, 2022
1 parent 127beb0 commit ccc22ab
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 0 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.5.1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ Bug fixes
~~~~~~~~~
- Bug in :meth:`Series.__getitem__` not falling back to positional for integer keys and boolean :class:`Index` (:issue:`48653`)
- Bug in :meth:`DataFrame.to_hdf` raising ``AssertionError`` with boolean index (:issue:`48667`)
- Bug in :func:`assert_index_equal` for extension arrays with non matching ``NA`` raising ``ValueError`` (:issue:`48608`)
- Bug in :meth:`DataFrame.pivot_table` raising unexpected ``FutureWarning`` when setting datetime column as index (:issue:`48683`)
-

Expand Down
4 changes: 4 additions & 0 deletions pandas/_libs/testing.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,10 @@ cpdef assert_almost_equal(a, b,
# nan / None comparison
return True

if isna(a) and not isna(b) or not isna(a) and isna(b):
# boolean value of pd.NA is ambigous
raise AssertionError(f"{a} != {b}")

if a == b:
# object comparison
return True
Expand Down
3 changes: 3 additions & 0 deletions pandas/_testing/asserters.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,9 @@ def _get_ilevel_values(index, level):
if not left.equals(right):
mismatch = left._values != right._values

if is_extension_array_dtype(mismatch):
mismatch = cast("ExtensionArray", mismatch).fillna(True)

diff = np.sum(mismatch.astype(int)) * 100.0 / len(left)
msg = f"{obj} values are different ({np.round(diff, 5)} %)"
raise_assert_detail(obj, msg, left, right)
Expand Down
12 changes: 12 additions & 0 deletions pandas/tests/util/test_assert_index_equal.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,3 +280,15 @@ def test_assert_index_equal_object_ints_order_false():
idx1 = Index([1, 3], dtype="object")
idx2 = Index([3, 1], dtype="object")
tm.assert_index_equal(idx1, idx2, check_order=False)


@pytest.mark.parametrize("check_categorical", [True, False])
@pytest.mark.parametrize("check_names", [True, False])
def test_assert_ea_index_equal_non_matching_na(check_names, check_categorical):
# GH#48608
idx1 = Index([1, 2], dtype="Int64")
idx2 = Index([1, NA], dtype="Int64")
with pytest.raises(AssertionError, match="50.0 %"):
tm.assert_index_equal(
idx1, idx2, check_names=check_names, check_categorical=check_categorical
)

0 comments on commit ccc22ab

Please sign in to comment.