Skip to content

Commit 803070c

Browse files
committed
BUG: Fix assert_frame_equal with check_dtype=False for pd.NA with different dtypes
1 parent bb10b27 commit 803070c

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

doc/source/whatsnew/v3.0.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,7 @@ Other
994994
- Bug in printing a :class:`Series` with a :class:`DataFrame` stored in :attr:`Series.attrs` raised a ``ValueError`` (:issue:`60568`)
995995
- Fixed bug where the :class:`DataFrame` constructor misclassified array-like objects with a ``.name`` attribute as :class:`Series` or :class:`Index` (:issue:`61443`)
996996
- Fixed regression in :meth:`DataFrame.from_records` not initializing subclasses properly (:issue:`57008`)
997+
- Bug in :func:`assert_frame_equal` with ``check_dtype=False`` failing to compare DataFrames containing ``pd.NA`` that differ only in dtype (``object`` vs ``Int32``). (:issue:`61473`)
997998

998999
.. ***DO NOT USE THIS SECTION***
9991000

pandas/_testing/asserters.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,10 +1031,16 @@ def assert_series_equal(
10311031
else:
10321032
# convert both to NumPy if not, check_dtype would raise earlier
10331033
lv, rv = left_values, right_values
1034-
if isinstance(left_values, ExtensionArray):
1035-
lv = left_values.to_numpy()
1036-
if isinstance(right_values, ExtensionArray):
1037-
rv = right_values.to_numpy()
1034+
if check_dtype:
1035+
if isinstance(left_values, ExtensionArray):
1036+
lv = left_values.to_numpy()
1037+
if isinstance(right_values, ExtensionArray):
1038+
rv = right_values.to_numpy()
1039+
else:
1040+
if isinstance(left_values, ExtensionArray):
1041+
lv = left_values.to_numpy(dtype="object")
1042+
if isinstance(right_values, ExtensionArray):
1043+
rv = right_values.to_numpy(dtype="object")
10381044
assert_numpy_array_equal(
10391045
lv,
10401046
rv,

pandas/tests/util/test_assert_frame_equal.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,11 @@ def test_assert_frame_equal_set_mismatch():
395395
msg = r'DataFrame.iloc\[:, 0\] \(column name="set_column"\) values are different'
396396
with pytest.raises(AssertionError, match=msg):
397397
tm.assert_frame_equal(df1, df2)
398+
399+
400+
def test_assert_frame_equal_pdNa_ignore_dtype():
401+
# GH#61473
402+
df1 = DataFrame({"x": pd.Series([pd.NA], dtype="Int32")})
403+
df2 = DataFrame({"x": pd.Series([pd.NA], dtype="object")})
404+
405+
tm.assert_frame_equal(df1, df2, check_dtype=False)

0 commit comments

Comments
 (0)