Description
Code Sample, a copy-pastable example if possible
date_idx = pd.date_range('2019', periods=5, freq='MS')
df_single = pd.DataFrame(list(range(5)), index=date_idx)
df_multi = pd.DataFrame(list(range(15)),
index=pd.MultiIndex.from_product([date_idx, list(range(3))],
names=['x', 'y']))
# All of the following get rows starting in February
df_single['2019-2':]
df_single.loc['2019-2':]
df_single.loc(axis=0)['2019-2':]
# But none of the following do -- not even the last one
df_multi['2019-2':] # TypeError: '<' not supported between instances of 'int' and 'slice'
df_multi.loc['2019-2':] # Same error
df_multi.loc(axis=0)['2019-2':] # Same error
df_multi.loc(axis=0)['2019-2':, :] # AttributeError: 'int' object has no attribute 'stop'
Problem description
For single (not multi-) datetime indexes, you can use a string coercible to a pd.Timestamp
to slice the dataframe. For MultiIndexes with one level a DatetimeIndex, this indexing is not possible, no matter how precisely you specify the slice axes and levels (and even when the dataframe is sorted by the DatetimeIndex level, and the DatetimeIndex level is the outermost level).
Expected Output
df_multi.loc(axis=0)['2019-2':, :]
should certainly slice the rows correctly, as
- The slicing is totally unambiguous (nothing needs to be inferred by pandas -- the axis and all slice levels are provided)
- The dataframe is sorted by the DatetimeIndex level
- The DatetimeIndex level is outermost
Cases more complicated than this might have some caveats, but the example provided above should definitely work.
Output of pd.show_versions()
INSTALLED VERSIONS
commit: None
python: 3.7.1.final.0
python-bits: 64
OS: Windows
OS-release: 2012ServerR2
machine: AMD64
processor: Intel64 Family 6 Model 45 Stepping 2, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None
pandas: 0.23.4
pytest: 4.0.2
pip: 18.1
setuptools: 40.6.3
Cython: 0.29.2
numpy: 1.15.4
scipy: 1.1.0
pyarrow: None
xarray: None
IPython: 7.2.0
sphinx: 1.8.2
patsy: 0.5.1
dateutil: 2.7.5
pytz: 2018.7
blosc: None
bottleneck: 1.2.1
tables: 3.4.4
numexpr: 2.6.8
feather: None
matplotlib: 3.0.2
openpyxl: 2.5.12
xlrd: 1.2.0
xlwt: 1.3.0
xlsxwriter: 1.1.2
lxml: 4.2.5
bs4: 4.6.3
html5lib: 1.0.1
sqlalchemy: 1.2.15
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None