Skip to content

Commit 904f3cc

Browse files
committed
BUG: treat missing sentinels as equal across dtypes when check_dtype=False; add test (GH#61473)
1 parent 72ba35b commit 904f3cc

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

pandas/_testing/asserters.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,33 @@ def assert_series_equal(
11051105
index_values=left.index,
11061106
obj=str(obj),
11071107
)
1108+
elif not check_dtype:
1109+
1110+
left_na = left.isna().to_numpy(dtype=bool, copy=False)
1111+
right_na = right.isna().to_numpy(dtype=bool, copy=False)
1112+
assert_numpy_array_equal(
1113+
left_na, right_na, obj=f"{obj} NA mask", index_values=left.index
1114+
)
1115+
1116+
1117+
def _normalize(arr):
1118+
1119+
return [
1120+
(None if pd.isna(x) else x)
1121+
for x in arr.to_numpy(dtype=object)
1122+
]
1123+
left_valid = _normalize(left[~left_na])
1124+
right_valid = _normalize(right[~right_na])
1125+
1126+
_testing.assert_almost_equal(
1127+
left_valid,
1128+
right_valid,
1129+
check_dtype=False,
1130+
rtol=rtol,
1131+
atol=atol,
1132+
obj=str(obj),
1133+
index_values=left.index,
1134+
)
11081135
else:
11091136
_testing.assert_almost_equal(
11101137
left._values,
@@ -1488,3 +1515,4 @@ def assert_metadata_equivalent(
14881515
assert val is None
14891516
else:
14901517
assert val == getattr(right, attr, None)
1518+

pandas/tests/util/test_assert_frame_equal.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import pandas as pd
66
from pandas import DataFrame
77
import pandas._testing as tm
8+
from pandas.testing import assert_frame_equal
89

910

1011
@pytest.fixture(params=[True, False])
@@ -399,6 +400,7 @@ def test_assert_frame_equal_set_mismatch():
399400
tm.assert_frame_equal(df1, df2)
400401

401402

403+
402404
def test_datetimelike_compat_deprecated():
403405
# GH#55638
404406
df = DataFrame({"a": [1]})
@@ -413,3 +415,10 @@ def test_datetimelike_compat_deprecated():
413415
tm.assert_series_equal(df["a"], df["a"], check_datetimelike_compat=True)
414416
with tm.assert_produces_warning(Pandas4Warning, match=msg):
415417
tm.assert_series_equal(df["a"], df["a"], check_datetimelike_compat=False)
418+
419+
420+
def test_assert_frame_equal_na_object_vs_int32_check_dtype_false():
421+
422+
df1 = pd.DataFrame({"x": pd.Series([pd.NA], dtype="Int32")})
423+
df2 = pd.DataFrame({"x": pd.Series([pd.NA], dtype="object")})
424+
assert_frame_equal(df1, df2, check_dtype=False)

0 commit comments

Comments
 (0)