diff --git a/pandas/core/arrays/datetimes.py b/pandas/core/arrays/datetimes.py index d3c0bbdf53310..fc894e1de0e37 100644 --- a/pandas/core/arrays/datetimes.py +++ b/pandas/core/arrays/datetimes.py @@ -226,13 +226,16 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps): """ _typ = "datetimearray" - _internal_fill_value = np.datetime64("NaT", "ns") _recognized_scalars = (datetime, np.datetime64) _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype( x, "M" ) or isinstance(x, DatetimeTZDtype) _infer_matches = ("datetime", "datetime64", "date") + @property + def _internal_fill_value(self) -> np.datetime64: + return np.datetime64("NaT", self.unit) + @property def _scalar_type(self) -> type[Timestamp]: return Timestamp diff --git a/pandas/core/arrays/timedeltas.py b/pandas/core/arrays/timedeltas.py index 514ad28f698d6..ff2e2e6429936 100644 --- a/pandas/core/arrays/timedeltas.py +++ b/pandas/core/arrays/timedeltas.py @@ -154,11 +154,14 @@ class TimedeltaArray(dtl.TimelikeOps): """ _typ = "timedeltaarray" - _internal_fill_value = np.timedelta64("NaT", "ns") _recognized_scalars = (timedelta, np.timedelta64, Tick) _is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype(x, "m") _infer_matches = ("timedelta", "timedelta64") + @property + def _internal_fill_value(self) -> np.timedelta64: + return np.timedelta64("NaT", self.unit) + @property def _scalar_type(self) -> type[Timedelta]: return Timedelta diff --git a/pandas/tests/frame/methods/test_quantile.py b/pandas/tests/frame/methods/test_quantile.py index eded9d9473385..df1f2a80e76e7 100644 --- a/pandas/tests/frame/methods/test_quantile.py +++ b/pandas/tests/frame/methods/test_quantile.py @@ -928,3 +928,12 @@ def test_multi_quantile_numeric_only_retains_columns(): tm.assert_frame_equal( result, expected, check_index_type=True, check_column_type=True ) + + +@pytest.mark.parametrize("typ", ["datetime64", "timedelta64"]) +def test_quantile_empty_datetimelike(typ, unit): + dtype = f"{typ}[{unit}]" + df = DataFrame(np.array([], dtype=dtype)) + result = df.quantile() + expected = Series([pd.NaT], name=0.5, dtype=dtype) + tm.assert_series_equal(result, expected) diff --git a/pandas/tests/series/methods/test_quantile.py b/pandas/tests/series/methods/test_quantile.py index fa0563271d7df..294437e557fdc 100644 --- a/pandas/tests/series/methods/test_quantile.py +++ b/pandas/tests/series/methods/test_quantile.py @@ -245,3 +245,10 @@ def test_quantile_dtype_size(self, any_int_ea_dtype): result = ser.quantile([0.1, 0.5]) expected = Series([1, 1], dtype=any_int_ea_dtype, index=[0.1, 0.5]) tm.assert_series_equal(result, expected) + + +@pytest.mark.parametrize("typ", ["datetime64", "timedelta64"]) +def test_quantile_empty_datetimelike(typ, unit): + ser = Series([], dtype=f"{typ}[{unit}]") + result = ser.quantile() + assert result is pd.NaT