iloc with empty list raises IndexError · Issue #6536 · pandas-dev/pandas (original) (raw)

When you slice a dataframe with an empty list you get an IndexError instead of an empty dataframe. Slicing with a non-empty list works fine. Tested in pandas 0.13.1. This is a regression from pandas 0.11.0.

df = pd.DataFrame(np.arange(25.0).reshape((5,5)), columns=list('abcde'))

Slice with non-empty list.

[5 rows x 5 columns] df.iloc[[1,2,3]] Out[34]: a b c d e 1 5 6 7 8 9 2 10 11 12 13 14 3 15 16 17 18 19

[3 rows x 5 columns]

Slice with empty list.

df.iloc[[]] Traceback (most recent call last): File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/ipython-1.1.0_1_ahl1-py2.7.egg/IPython/core/interactiveshell.py", line 2830, in run_code exec code_obj in self.user_global_ns, self.user_ns File "", line 1, in df.iloc[[]] File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/indexing.py", line 1028, in getitem return self._getitem_axis(key, axis=0) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/indexing.py", line 1238, in _getitem_axis return self._get_loc(key, axis=axis) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/indexing.py", line 73, in _get_loc return self.obj._ixs(key, axis=axis) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 1588, in _ixs result = self.reindex(i, takeable=True) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 2162, in reindex **kwargs) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/generic.py", line 1565, in reindex takeable=takeable).finalize(self) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 2117, in _reindex_axes fill_value, limit, takeable=takeable) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/frame.py", line 2126, in _reindex_index takeable=takeable) File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/index.py", line 1233, in reindex return self[target], target File "/users/is/dbew/pyenvs/timeseries/lib/python2.7/site-packages/pandas-0.13.1-py2.7-linux-x86_64.egg/pandas/core/index.py", line 624, in getitem result = arr_idx[key] IndexError: arrays used as indices must be of integer (or boolean) type