Description
Code Sample, a copy-pastable example if possible
In [2]: s = pd.Series(-1, index=pd.MultiIndex.from_product([[0, 1]]*2))
In [3]: s.loc[0, 3]
---------------------------------------------------------------------------
IndexingError Traceback (most recent call last)
<ipython-input-3-16ed32312931> in <module>()
----> 1 s.loc[0, 3]
/home/nobackup/repo/pandas/pandas/core/indexing.py in __getitem__(self, key)
1470 except (KeyError, IndexError):
1471 pass
-> 1472 return self._getitem_tuple(key)
1473 else:
1474 # we by definition only have the 0th axis
/home/nobackup/repo/pandas/pandas/core/indexing.py in _getitem_tuple(self, tup)
873
874 # no multi-index, so validate all of the indexers
--> 875 self._has_valid_tuple(tup)
876
877 # ugly hack for GH #836
/home/nobackup/repo/pandas/pandas/core/indexing.py in _has_valid_tuple(self, key)
218 for i, k in enumerate(key):
219 if i >= self.obj.ndim:
--> 220 raise IndexingError('Too many indexers')
221 try:
222 self._validate_key(k, i)
IndexingError: Too many indexers
In [4]: s.loc[3, 1]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/nobackup/repo/pandas/pandas/core/indexing.py in _validate_key(self, key, axis)
1789 if not ax.contains(key):
-> 1790 error()
1791 except TypeError as e:
/home/nobackup/repo/pandas/pandas/core/indexing.py in error()
1784 .format(key=key,
-> 1785 axis=self.obj._get_axis_name(axis)))
1786
KeyError: 'the label [3] is not in the [index]'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-4-0ff3baa1fa82> in <module>()
----> 1 s.loc[3, 1]
/home/nobackup/repo/pandas/pandas/core/indexing.py in __getitem__(self, key)
1470 except (KeyError, IndexError):
1471 pass
-> 1472 return self._getitem_tuple(key)
1473 else:
1474 # we by definition only have the 0th axis
/home/nobackup/repo/pandas/pandas/core/indexing.py in _getitem_tuple(self, tup)
873
874 # no multi-index, so validate all of the indexers
--> 875 self._has_valid_tuple(tup)
876
877 # ugly hack for GH #836
/home/nobackup/repo/pandas/pandas/core/indexing.py in _has_valid_tuple(self, key)
220 raise IndexingError('Too many indexers')
221 try:
--> 222 self._validate_key(k, i)
223 except ValueError:
224 raise ValueError("Location based indexing can only have "
/home/nobackup/repo/pandas/pandas/core/indexing.py in _validate_key(self, key, axis)
1796 raise
1797 except:
-> 1798 error()
1799
1800 def _is_scalar_access(self, key):
/home/nobackup/repo/pandas/pandas/core/indexing.py in error()
1783 raise KeyError(u"the label [{key}] is not in the [{axis}]"
1784 .format(key=key,
-> 1785 axis=self.obj._get_axis_name(axis)))
1786
1787 try:
KeyError: 'the label [3] is not in the [index]'
Problem description
The second error is correct, the first is wrong. Might be related to #20951, which however is easier to explain given that it happens on a DataFrame, where there is the axis/level ambiguity.
Expected Output
KeyError: 'the label [3] is not in the [index]'
Output of pd.show_versions()
INSTALLED VERSIONS
commit: 1288e52
python: 3.5.3.final.0
python-bits: 64
OS: Linux
OS-release: 4.9.0-6-amd64
machine: x86_64
processor:
byteorder: little
LC_ALL: None
LANG: it_IT.UTF-8
LOCALE: it_IT.UTF-8
pandas: 0.24.0.dev0+23.g1288e5269
pytest: 3.5.0
pip: 9.0.1
setuptools: 39.0.1
Cython: 0.25.2
numpy: 1.14.3
scipy: 0.19.0
pyarrow: None
xarray: None
IPython: 6.2.1
sphinx: 1.5.6
patsy: 0.5.0
dateutil: 2.7.3
pytz: 2018.4
blosc: None
bottleneck: 1.2.0dev
tables: 3.3.0
numexpr: 2.6.1
feather: 0.3.1
matplotlib: 2.0.0
openpyxl: 2.3.0
xlrd: 1.0.0
xlwt: 1.3.0
xlsxwriter: 0.9.6
lxml: 4.1.1
bs4: 4.5.3
html5lib: 0.999999999
sqlalchemy: 1.0.15
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: 0.2.1