Closed
Description
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)
<ipython-input-5-44a523c6460e> in <module>()
----> 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