Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERR: missing key not displayed in exception message for IntervalIndex #27365

Closed
simonjayhawkins opened this issue Jul 12, 2019 · 3 comments · Fixed by #37873
Closed

ERR: missing key not displayed in exception message for IntervalIndex #27365

simonjayhawkins opened this issue Jul 12, 2019 · 3 comments · Fixed by #37873
Labels
Bug Error Reporting Incorrect or improved errors from pandas Indexing Related to indexing on series/frames, not to indexes themselves Interval Interval data type
Milestone

Comments

@simonjayhawkins
Copy link
Member

Code Sample, a copy-pastable example if possible

adapted from test_non_matching in pandas\tests\indexing\interval\test_interval.py

>>> import numpy as np
>>> import pandas as pd
>>> pd.__version__
'0.25.0rc0+59.g0437f6899'
>>>
>>> s=pd.Series(np.arange(5), pd.IntervalIndex.from_breaks(np.arange(6)))
>>> s
(0, 1]    0
(1, 2]    1
(2, 3]    2
(3, 4]    3
(4, 5]    4
dtype: int32
>>>
>>> s.loc[[4,5]]
(3, 4]    3
(4, 5]    4
dtype: int32
>>>
>>> s.loc[[4,5,6]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1409, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1816, in _getitem_axis
    return self._getitem_iterable(key, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1118, in _getitem_iterable
    keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1060, in _get_listlike_indexer
    indexer, keyarr = ax._convert_listlike_indexer(key, kind=self.name)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\base.py", line 3239, in _convert_listlike_indexer
    indexer = self._convert_list_indexer(keyarr, kind=kind)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\interval.py", line 626, in _convert_list_indexer
    raise KeyError
KeyError
>>>
>>> s.to_frame().loc[[4,5,6]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1409, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1816, in _getitem_axis
    return self._getitem_iterable(key, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1118, in _getitem_iterable
    keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1060, in _get_listlike_indexer
    indexer, keyarr = ax._convert_listlike_indexer(key, kind=self.name)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\base.py", line 3239, in _convert_listlike_indexer
    indexer = self._convert_list_indexer(keyarr, kind=kind)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\interval.py", line 626, in _convert_list_indexer
    raise KeyError
KeyError
>>>

Problem description

With a list indexer, the missing key should be in the exception message

Expected Output

KeyError: 6

another example - from test_loc_with_overlap in pandas\tests\indexing\interval\test_interval_new.py

>>> idx = pd.IntervalIndex.from_tuples([(1, 5), (3, 7)])
>>> s = pd.Series(range(len(idx)), index=idx)
>>> s
(1, 5]    0
(3, 7]    1
dtype: int64
>>>
>>> s.loc[pd.Interval(3, 5)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1409, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1827, in _getitem_axis
    return self._get_label(key, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 152, in _get_label
    return self.obj._xs(label, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\generic.py", line 3738, in xs
    loc = self.index.get_loc(key)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\interval.py", line 875, in get_loc
    raise KeyError(key)
KeyError: Interval(3, 5, closed='right')
>>>
>>> s.loc[[pd.Interval(3, 5)]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1409, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1816, in _getitem_axis
    return self._getitem_iterable(key, axis=axis)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1118, in _getitem_iterable
    keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexing.py", line 1060, in _get_listlike_indexer
    indexer, keyarr = ax._convert_listlike_indexer(key, kind=self.name)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\base.py", line 3239, in _convert_listlike_indexer
    indexer = self._convert_list_indexer(keyarr, kind=kind)
  File "C:\Users\simon\OneDrive\code\pandas-simonjayhawkins\pandas\core\indexes\interval.py", line 626, in _convert_list_indexer
    raise KeyError
KeyError
>>>

Output of pd.show_versions()

[paste the output of pd.show_versions() here below this line]

@simonjayhawkins simonjayhawkins added Indexing Related to indexing on series/frames, not to indexes themselves Error Reporting Incorrect or improved errors from pandas Interval Interval data type labels Jul 12, 2019
@simonjayhawkins simonjayhawkins added this to the Contributions Welcome milestone Jul 12, 2019
@another-green
Copy link
Contributor

Hi, I will take a look at this and add error messages.

@another-green
Copy link
Contributor

I am aware of the changes going around the Interval contains function. In the pandas\tests\indexing\interval\test_interval_new.py, the test is skipped.
pytestmark = pytest.mark.skip(reason="new indexing tests for issue 16316")

I have added error msg in the codebase. Should I enable the test_interval_new.py ? Thanks~

@another-green
Copy link
Contributor

@simonjayhawkins Can you provide some feedback on if we want to skip the test in test_interval_new.py?

@mroeschke mroeschke added the Bug label Apr 27, 2020
@jreback jreback modified the milestones: Contributions Welcome, 1.2 Nov 18, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Error Reporting Incorrect or improved errors from pandas Indexing Related to indexing on series/frames, not to indexes themselves Interval Interval data type
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants