-
- Notifications
You must be signed in to change notification settings - Fork 19.3k
Description
Code Sample, a copy-pastable example if possible
# Your code here In [26]: df = pd.DataFrame(0, index=range(2), columns=pd.MultiIndex.from_product([[1], [2]])) ...: ...: In [27]: df Out[27]: 1 2 0 0 1 0 In [28]: df[[]] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-28-13353c6d99d3> in <module>() ----> 1 df[[]] /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/frame.py in __getitem__(self, key) 2014 if isinstance(key, (Series, np.ndarray, Index, list)): 2015 # either boolean or fancy integer index -> 2016 return self._getitem_array(key) 2017 elif isinstance(key, DataFrame): 2018 return self._getitem_frame(key) /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/frame.py in _getitem_array(self, key) 2058 return self.take(indexer, axis=0, convert=False) 2059 else: -> 2060 indexer = self.loc._convert_to_indexer(key, axis=1) 2061 return self.take(indexer, axis=1, convert=True) 2062 /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/indexing.py in _convert_to_indexer(self, obj, axis, is_setter) 1216 # this is not the most robust, but... 1217 if (isinstance(labels, MultiIndex) and -> 1218 not isinstance(objarr[0], tuple)): 1219 level = 0 1220 _, indexer = labels.reindex(objarr, level=level) IndexError: index 0 is out of bounds for axis 0 with size 0Problem description
This is inconsistent with our other indexers, which all return empty DataFrames / series
- Regular index in the columns or index
In [30]: df.T[[]] Out[30]: Empty DataFrame Columns: [] Index: [(1, 2)]In [32]: df.loc[[]] Out[32]: Empty DataFrame Columns: [(1, 2)] Index: []- MultiIndex in the index with .loc
In [34]: df.T.loc[[]] Out[34]: Empty DataFrame Columns: [0, 1] Index: []A probably related bug: while df.loc[:, []] works as expected, __setitem__ raises with the same error:
In [65]: df.loc[:, []] # OK Out[65]: Empty DataFrame Columns: [] Index: [0, 1]In [66]: df.loc[:, []] = 10 # should be a no-op really --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-66-6cd48eddd6a3> in <module>() ----> 1 df.loc[:, []] = 10 /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/indexing.py in __setitem__(self, key, value) 146 else: 147 key = com._apply_if_callable(key, self.obj) --> 148 indexer = self._get_setitem_indexer(key) 149 self._setitem_with_indexer(indexer, value) 150 /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/indexing.py in _get_setitem_indexer(self, key) 125 if isinstance(key, tuple): 126 try: --> 127 return self._convert_tuple(key, is_setter=True) 128 except IndexingError: 129 pass /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/indexing.py in _convert_tuple(self, key, is_setter) 192 if i >= self.obj.ndim: 193 raise IndexingError('Too many indexers') --> 194 idx = self._convert_to_indexer(k, axis=i, is_setter=is_setter) 195 keyidx.append(idx) 196 return tuple(keyidx) /Users/tom.augspurger/Envs/py3/lib/python3.6/site-packages/pandas/pandas/core/indexing.py in _convert_to_indexer(self, obj, axis, is_setter) 1216 # this is not the most robust, but... 1217 if (isinstance(labels, MultiIndex) and -> 1218 not isinstance(objarr[0], tuple)): 1219 level = 0 1220 _, indexer = labels.reindex(objarr, level=level) IndexError: index 0 is out of bounds for axis 0 with size 0Expected Output
In [47]: pd.DataFrame([], index=[0, 1]) Out[47]: Empty DataFrame Columns: [] Index: [0, 1]I think that's right, all the columns should be dropped.
Output of pd.show_versions()
INSTALLED VERSIONS
commit: 0ceb40f
python: 3.6.0.final.0
python-bits: 64
OS: Darwin
OS-release: 16.4.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
pandas: 0.19.0+466.g0ceb40fde.dirty
pytest: 3.0.5
pip: 9.0.1
setuptools: 32.3.0
Cython: 0.25.2
numpy: 1.12.0
scipy: 0.18.1
xarray: None
IPython: 5.2.2
sphinx: 1.5.2
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2016.10
blosc: None
bottleneck: 1.2.0
tables: None
numexpr: 2.6.1
feather: None
matplotlib: 2.0.0
openpyxl: None
xlrd: 1.0.0
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: 0.9999999
httplib2: None
apiclient: None
sqlalchemy: 1.1.5
pymysql: None
psycopg2: 2.6.2 (dt dec pq3 ext lo64)
jinja2: 2.9.5
s3fs: 0.0.8
pandas_datareader: None