diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 469783913dc42..9aa5180133bd4 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -99,7 +99,6 @@ maybe_box_native, maybe_convert_platform, maybe_downcast_to_dtype, - maybe_infer_to_datetimelike, validate_numeric_casting, ) from pandas.core.dtypes.common import ( @@ -147,6 +146,7 @@ from pandas.core.arrays.sparse import SparseFrameAccessor from pandas.core.construction import ( extract_array, + sanitize_array, sanitize_masked_array, ) from pandas.core.generic import ( @@ -4045,7 +4045,7 @@ def _sanitize_column(self, value) -> ArrayLike: # possibly infer to datetimelike if is_object_dtype(value.dtype): - value = maybe_infer_to_datetimelike(value) + value = sanitize_array(value, None) else: value = construct_1d_arraylike_from_scalar(value, len(self), dtype=None) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index f2edfed019bdb..9d61be5887b7e 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -421,19 +421,26 @@ def test_setitem_intervals(self): # B & D end up as Categoricals # the remainer are converted to in-line objects - # contining an IntervalIndex.values + # containing an IntervalIndex.values df["B"] = ser df["C"] = np.array(ser) df["D"] = ser.values df["E"] = np.array(ser.values) + df["F"] = ser.astype(object) assert is_categorical_dtype(df["B"].dtype) assert is_interval_dtype(df["B"].cat.categories) assert is_categorical_dtype(df["D"].dtype) assert is_interval_dtype(df["D"].cat.categories) - assert is_object_dtype(df["C"]) - assert is_object_dtype(df["E"]) + # Thes goes through the Series constructor and so get inferred back + # to IntervalDtype + assert is_interval_dtype(df["C"]) + assert is_interval_dtype(df["E"]) + + # But the Series constructor doesn't do inference on Series objects, + # so setting df["F"] doesnt get cast back to IntervalDtype + assert is_object_dtype(df["F"]) # they compare equal as Index # when converted to numpy objects