Skip to content

pd.Categorical.contains([item, otheritem]) raises ValueError #21729

Closed
@toobaz

Description

@toobaz

Code Sample, a copy-pastable example if possible

In [2]: idx = pd.CategoricalIndex([1, 2, 3])

In [3]: list('a') in idx
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-76f69ba8dbb9> in <module>()
----> 1 list('a') in idx

/home/nobackup/repo/pandas/pandas/core/indexes/category.py in __contains__(self, key)
    327             return self.hasnans
    328 
--> 329         return contains(self, key, container=self._engine)
    330 
    331     @Appender(_index_shared_docs['contains'] % _index_doc_kwargs)

/home/nobackup/repo/pandas/pandas/core/arrays/categorical.py in contains(cat, key, container)
    187     before calling this method.
    188     """
--> 189     hash(key)
    190 
    191     # get location of key in categories.

TypeError: unhashable type: 'list'

In [4]: list('ab') in idx
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-0b6b309a5156> in <module>()
----> 1 list('ab') in idx

/home/nobackup/repo/pandas/pandas/core/indexes/category.py in __contains__(self, key)
    324     def __contains__(self, key):
    325         # if key is a NaN, check if any NaN is in self.
--> 326         if isna(key):
    327             return self.hasnans
    328 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Problem description

This is the only case, to the best of my (very limited - I didn't investigate much) knowledge, in which the contains method of an index raises anything different from TypeError: unhashable type:....

xref #21313

Expected Output

TypeError: unhashable type: 'list'

Output of pd.show_versions()

INSTALLED VERSIONS

commit: 2b13605
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+216.g2b136054d
pytest: 3.5.0
pip: 9.0.1
setuptools: 39.2.0
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.2.2.post1153+gff6786446
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
gcsfs: None

Metadata

Metadata

Assignees

No one assigned

    Labels

    CategoricalCategorical Data TypeError ReportingIncorrect or improved errors from pandasIndexRelated to the Index class or subclasses

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions