Skip to content

Commit 9ee361b

Browse files
authored
BUG: .quantile with empty temporal data (#63407)
1 parent 9b8598a commit 9ee361b

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

pandas/core/arrays/datetimes.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,16 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps):
226226
"""
227227

228228
_typ = "datetimearray"
229-
_internal_fill_value = np.datetime64("NaT", "ns")
230229
_recognized_scalars = (datetime, np.datetime64)
231230
_is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype(
232231
x, "M"
233232
) or isinstance(x, DatetimeTZDtype)
234233
_infer_matches = ("datetime", "datetime64", "date")
235234

235+
@property
236+
def _internal_fill_value(self) -> np.datetime64:
237+
return np.datetime64("NaT", self.unit)
238+
236239
@property
237240
def _scalar_type(self) -> type[Timestamp]:
238241
return Timestamp

pandas/core/arrays/timedeltas.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,14 @@ class TimedeltaArray(dtl.TimelikeOps):
154154
"""
155155

156156
_typ = "timedeltaarray"
157-
_internal_fill_value = np.timedelta64("NaT", "ns")
158157
_recognized_scalars = (timedelta, np.timedelta64, Tick)
159158
_is_recognized_dtype: Callable[[DtypeObj], bool] = lambda x: lib.is_np_dtype(x, "m")
160159
_infer_matches = ("timedelta", "timedelta64")
161160

161+
@property
162+
def _internal_fill_value(self) -> np.timedelta64:
163+
return np.timedelta64("NaT", self.unit)
164+
162165
@property
163166
def _scalar_type(self) -> type[Timedelta]:
164167
return Timedelta

pandas/tests/frame/methods/test_quantile.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,3 +928,12 @@ def test_multi_quantile_numeric_only_retains_columns():
928928
tm.assert_frame_equal(
929929
result, expected, check_index_type=True, check_column_type=True
930930
)
931+
932+
933+
@pytest.mark.parametrize("typ", ["datetime64", "timedelta64"])
934+
def test_quantile_empty_datetimelike(typ, unit):
935+
dtype = f"{typ}[{unit}]"
936+
df = DataFrame(np.array([], dtype=dtype))
937+
result = df.quantile()
938+
expected = Series([pd.NaT], name=0.5, dtype=dtype)
939+
tm.assert_series_equal(result, expected)

pandas/tests/series/methods/test_quantile.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,10 @@ def test_quantile_dtype_size(self, any_int_ea_dtype):
245245
result = ser.quantile([0.1, 0.5])
246246
expected = Series([1, 1], dtype=any_int_ea_dtype, index=[0.1, 0.5])
247247
tm.assert_series_equal(result, expected)
248+
249+
250+
@pytest.mark.parametrize("typ", ["datetime64", "timedelta64"])
251+
def test_quantile_empty_datetimelike(typ, unit):
252+
ser = Series([], dtype=f"{typ}[{unit}]")
253+
result = ser.quantile()
254+
assert result is pd.NaT

0 commit comments

Comments
 (0)