Skip to content

Bug in CategoricalIndex[Interval].__contains__ for non-interval data #23705

Closed
@TomAugspurger

Description

@TomAugspurger
In [10]: idx = pd.CategoricalIndex(pd.IntervalIndex.from_breaks([1, 2, 3]))

In [11]: 'a' in idx
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-50c294b3bf00> in <module>()
----> 1 'a' in idx

~/sandbox/pandas/pandas/core/indexes/category.py in __contains__(self, key)
    358             return self.hasnans
    359
--> 360         return contains(self, key, container=self._engine)
    361
    362     @Appender(_index_shared_docs['contains'] % _index_doc_kwargs)

~/sandbox/pandas/pandas/core/arrays/categorical.py in contains(cat, key, container)
    200     #  can't be in container either.
    201     try:
--> 202         loc = cat.categories.get_loc(key)
    203     except KeyError:
    204         return False

~/sandbox/pandas/pandas/core/indexes/interval.py in get_loc(self, key, method)
    716                 key = self._maybe_cast_slice_bound(key, 'left', None)
    717
--> 718             start, stop = self._find_non_overlapping_monotonic_bounds(key)
    719
    720             if start is None or stop is None:

~/sandbox/pandas/pandas/core/indexes/interval.py in _find_non_overlapping_monotonic_bounds(self, key)
    664
    665             start = self._searchsorted_monotonic(key, 'left')
--> 666             stop = self._searchsorted_monotonic(key, 'right')
    667         return start, stop
    668

~/sandbox/pandas/pandas/core/indexes/interval.py in _searchsorted_monotonic(self, label, side, exclude_label)
    625             sub_idx = self.left
    626             if self.open_left or exclude_label:
--> 627                 label = _get_prev_label(label)
    628
    629         return sub_idx._searchsorted_monotonic(label, side)

~/sandbox/pandas/pandas/core/indexes/interval.py in _get_prev_label(label)
     90     else:
     91         raise TypeError('cannot determine next label for type {typ!r}'
---> 92                         .format(typ=type(label)))
     93
     94

TypeError: cannot determine next label for type <class 'str'>

cc @jschendel

Metadata

Metadata

Assignees

No one assigned

    Labels

    CategoricalCategorical Data TypeIndexRelated to the Index class or subclassesIntervalInterval data type

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions