Skip to content

Commit 4e17955

Browse files
mroeschkeAndrew Bui
authored and
Andrew Bui
committed
Bug: Allow np.timedelta64 objects to index TimedeltaIndex (pandas-dev#20408)
1 parent c8aa0e4 commit 4e17955

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

doc/source/whatsnew/v0.23.0.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,8 @@ Timedelta
888888
- Bug in :func:`Timedelta.total_seconds()` causing precision errors i.e. ``Timedelta('30S').total_seconds()==30.000000000000004`` (:issue:`19458`)
889889
- Bug in :func: `Timedelta.__rmod__` where operating with a ``numpy.timedelta64`` returned a ``timedelta64`` object instead of a ``Timedelta`` (:issue:`19820`)
890890
- Multiplication of :class:`TimedeltaIndex` by ``TimedeltaIndex`` will now raise ``TypeError`` instead of raising ``ValueError`` in cases of length mis-match (:issue`19333`)
891-
-
891+
- Bug in indexing a :class:`TimedeltaIndex` with a ``np.timedelta64`` object which was raising a ``TypeError`` (:issue:`20393`)
892+
892893

893894
Timezones
894895
^^^^^^^^^

pandas/core/indexes/timedeltas.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,8 @@ def _maybe_cast_slice_bound(self, label, side, kind):
829829
else:
830830
return (lbound + to_offset(parsed.resolution) -
831831
Timedelta(1, 'ns'))
832-
elif is_integer(label) or is_float(label):
832+
elif ((is_integer(label) or is_float(label)) and
833+
not is_timedelta64_dtype(label)):
833834
self._invalid_indexer('slice', label)
834835

835836
return label

pandas/tests/indexing/test_timedelta.py

+12
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,15 @@ def test_listlike_setitem(self, value):
6868
series.iloc[0] = value
6969
expected = pd.Series([pd.NaT, 1, 2], dtype='timedelta64[ns]')
7070
tm.assert_series_equal(series, expected)
71+
72+
@pytest.mark.parametrize('start,stop, expected_slice', [
73+
[np.timedelta64(0, 'ns'), None, slice(0, 11)],
74+
[np.timedelta64(1, 'D'), np.timedelta64(6, 'D'), slice(1, 7)],
75+
[None, np.timedelta64(4, 'D'), slice(0, 5)]])
76+
def test_numpy_timedelta_scalar_indexing(self, start, stop,
77+
expected_slice):
78+
# GH 20393
79+
s = pd.Series(range(11), pd.timedelta_range('0 days', '10 days'))
80+
result = s.loc[slice(start, stop)]
81+
expected = s.iloc[expected_slice]
82+
tm.assert_series_equal(result, expected)

0 commit comments

Comments
 (0)