Cannot index TimedeltaIndex with np.timedelta64 scalars · Issue #20393 · pandas-dev/pandas (original) (raw)

Code Sample, a copy-pastable example if possible

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: s = pd.Series(range(11), pd.timedelta_range('0 days', '10 days'))

In [4]: s Out[4]: 0 days 0 1 days 1 2 days 2 3 days 3 4 days 4 5 days 5 6 days 6 7 days 7 8 days 8 9 days 9 10 days 10 Freq: D, dtype: int64

In [5]: s.loc[np.timedelta64(0, 'ns'):]

TypeError Traceback (most recent call last) in () ----> 1 s.loc[np.timedelta64(0, 'ns'):]

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexing.py in getitem(self, key) 1371 1372 maybe_callable = com._apply_if_callable(key, self.obj) -> 1373 return self._getitem_axis(maybe_callable, axis=axis) 1374 1375 def _is_scalar_access(self, key):

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis) 1579 if isinstance(key, slice): 1580 self._has_valid_type(key, axis) -> 1581 return self._get_slice_axis(key, axis=axis) 1582 elif is_bool_indexer(key): 1583 return self._getbool_axis(key, axis=axis)

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexing.py in _get_slice_axis(self, slice_obj, axis) 1404 labels = obj._get_axis(axis) 1405 indexer = labels.slice_indexer(slice_obj.start, slice_obj.stop, -> 1406 slice_obj.step, kind=self.name) 1407 1408 if isinstance(indexer, slice):

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexes/base.py in slice_indexer(self, start, end, step, kind) 3455 """ 3456 start_slice, end_slice = self.slice_locs(start, end, step=step, -> 3457 kind=kind) 3458 3459 # return a slice

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexes/base.py in slice_locs(self, start, end, step, kind) 3656 start_slice = None 3657 if start is not None: -> 3658 start_slice = self.get_slice_bound(start, 'left', kind) 3659 if start_slice is None: 3660 start_slice = 0

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_slice_bound(self, label, side, kind) 3582 # For datetime indices label may be a string that has to be converted 3583 # to datetime boundary according to its resolution. -> 3584 label = self._maybe_cast_slice_bound(label, side, kind) 3585 3586 # we need to look up the label

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexes/timedeltas.py in _maybe_cast_slice_bound(self, label, side, kind) 739 Timedelta(1, 'ns')) 740 elif is_integer(label) or is_float(label): --> 741 self._invalid_indexer('slice', label) 742 743 return label

~/miniconda3/envs/xarray-py36/lib/python3.6/site-packages/pandas/core/indexes/base.py in _invalid_indexer(self, form, key) 1574 "indexers [{key}] of {kind}".format( 1575 form=form, klass=type(self), key=key, -> 1576 kind=type(key))) 1577 1578 def get_duplicates(self):

TypeError: cannot do slice indexing on <class 'pandas.core.indexes.timedeltas.TimedeltaIndex'> with these indexers [0] of <class 'numpy.timedelta64'>

Problem description

I expect this to work as if I did indexing with a pd.Timedelta object:

In [6]: s.loc[pd.Timedelta('0 days'):]
Out[6]:
0 days      0
1 days      1
2 days      2
3 days      3
4 days      4
5 days      5
6 days      6
7 days      7
8 days      8
9 days      9
10 days    10
Freq: D, dtype: int64

This was surprising because every other pandas index can be indexed by the corresponding pandas scalar type. For example, this works with DatetimeIndex:

In [9]: s2 = pd.Series(range(10), pd.date_range('2001-01-01', periods=10))

In [10]: s2.loc[np.datetime64('2001-01-01'):]
Out[10]:
2001-01-01    0
2001-01-02    1
2001-01-03    2
2001-01-04    3
2001-01-05    4
2001-01-06    5
2001-01-07    6
2001-01-08    7
2001-01-09    8
2001-01-10    9
Freq: D, dtype: int64

Expected Output

Output of pd.show_versions()

INSTALLED VERSIONS ------------------ commit: None python: 3.6.4.final.0 python-bits: 64 OS: Darwin OS-release: 17.4.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8

pandas: 0.22.0
pytest: 3.4.0
pip: 9.0.1
setuptools: 38.5.1
Cython: None
numpy: 1.14.0
scipy: 1.0.0
pyarrow: None
xarray: 0.10.2
IPython: 6.2.1
sphinx: 1.7.0
patsy: 0.5.0
dateutil: 2.6.1
pytz: 2018.3
blosc: None
bottleneck: 1.2.1
tables: None
numexpr: None
feather: None
matplotlib: 2.1.2
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: 4.6.0
html5lib: 1.0.1
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None