Skip to content

Commit 98888c7

Browse files
committed
BUG: Fix assert_series_equal with check_category_order=False for categoricals with nulls
- Use allow_fill=True and fill_value=np.nan in take() to handle null codes properly - Add regression testcase test_assert_series_equal_categorical_nulls_different_order - Closes #62008
1 parent d4ae649 commit 98888c7

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

pandas/_testing/asserters.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,8 +495,8 @@ def assert_categorical_equal(
495495
lc, rc = left.categories, right.categories
496496
assert_index_equal(lc, rc, obj=f"{obj}.categories", exact=exact)
497497
assert_index_equal(
498-
left.categories.take(left.codes),
499-
right.categories.take(right.codes),
498+
left.categories.take(left.codes, allow_fill=True, fill_value=np.nan),
499+
right.categories.take(right.codes, allow_fill=True, fill_value=np.nan),
500500
obj=f"{obj}.values",
501501
exact=exact,
502502
)

pandas/tests/util/test_assert_series_equal.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,3 +507,19 @@ def test_assert_series_equal_check_exact_index_default(left_idx, right_idx):
507507
ser2 = Series(np.zeros(6, dtype=int), right_idx)
508508
tm.assert_series_equal(ser1, ser2)
509509
tm.assert_frame_equal(ser1.to_frame(), ser2.to_frame())
510+
511+
512+
def test_assert_series_equal_categorical_nulls_different_order():
513+
# https://github.com/pandas-dev/pandas/issues/62008
514+
values = ["B", np.nan, "D"]
515+
categorical_left = ["B", "D"]
516+
categorical_right = categorical_left[::-1] # Different Order
517+
518+
left = Series(Categorical(values, categories=categorical_left))
519+
right = Series(Categorical(values, categories=categorical_right))
520+
521+
tm.assert_series_equal(left, right, check_category_order=False)
522+
523+
msg = "Categorical.categories are different"
524+
with pytest.raises(AssertionError, match=msg):
525+
tm.assert_series_equal(left, right, check_category_order=True)

0 commit comments

Comments
 (0)