Skip to content

Commit 9eb3e52

Browse files
committed
BUG: assert_frame_equal exception for datetime
When using assert_frame_equal on two DataFrames that are equal, besides for their dtypes, one dtype being datetime64[ns] and the other not being an extension array, the code raises an exception due to an assertion that checks whether both are extension arrays. This fix addresses issue pandas-dev#37609.
1 parent 7b400b3 commit 9eb3e52

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

pandas/_testing.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -1456,7 +1456,19 @@ def assert_series_equal(
14561456
check_dtype=check_dtype,
14571457
index_values=np.asarray(left.index),
14581458
)
1459-
elif needs_i8_conversion(left.dtype) or needs_i8_conversion(right.dtype):
1459+
elif (is_extension_array_dtype(left.dtype) and needs_i8_conversion(right.dtype)) or (
1460+
is_extension_array_dtype(right.dtype) and needs_i8_conversion(left.dtype)
1461+
):
1462+
#If we have an extension array and Datetimearray / TimedeltaArray, we still
1463+
#want to assert_extension_array_equal even though Datetimearray / TimedeltaArray
1464+
#dtypes are not an instance of ExtensionArraydtype subclass
1465+
assert_extension_array_equal(
1466+
left._values,
1467+
right._values,
1468+
check_dtype=check_dtype,
1469+
index_values=np.asarray(left.index),
1470+
)
1471+
elif needs_i8_conversion(left.dtype) and needs_i8_conversion(right.dtype):
14601472
# DatetimeArray or TimedeltaArray
14611473
assert_extension_array_equal(
14621474
left._values,

pandas/tests/util/test_assert_extension_array_equal.py

+5
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,8 @@ def test_assert_extension_array_equal_ignore_dtype_mismatch(right_dtype):
111111
left = array([1, 2, 3], dtype="Int64")
112112
right = array([1, 2, 3], dtype=right_dtype)
113113
tm.assert_extension_array_equal(left, right, check_dtype=False)
114+
115+
def test_assert_frame_equal_datetime_dtype_mismatch():
116+
df1 = DataFrame({'a': []}, dtype="datetime64[ns]")
117+
df2 = DataFrame({'a': []})
118+
tm.assert_frame_equal(df1, df2, check_dtype=False)

0 commit comments

Comments
 (0)