Skip to content

MultiIndex needs to validate that levels and labels are compatible. #5213

Closed
@jtratner

Description

@jtratner

Urp:

n [1]: import pandas as pd

In [2]: mi = pd.MultiIndex(labels = [[1.25, 0.25, 3.1], [3.2, 1.2, 4.1]], levels=[['a'], ['a', 'b', 'c']])

In [3]: mi
Out[3]:
MultiIndex(levels=[[u'a'], [u'a', u'b', u'c']],
           labels=[[1, 0, 3], [3, 1, 4]])

In [4]: mi.values
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-4-e9591d864c48> in <module>()
----> 1 mi.values

/Users/jtratner/projects/python/pandas/pandas/core/index.py in values(self)
   2163             values = []
   2164             for lev, lab in zip(self.levels, self.labels):
-> 2165                 taken = com.take_1d(lev.values, lab)
   2166                 # Need to box timestamps, etc.
   2167                 if hasattr(lev, '_box_values'):

/Users/jtratner/projects/python/pandas/pandas/core/common.py in take_nd(arr, indexer, axis, out, fill_value, mask_info, allow_fill)
    630     func = _get_take_nd_function(arr.ndim, arr.dtype, out.dtype,
    631                                  axis=axis, mask_info=mask_info)
--> 632     func(arr, indexer, out, fill_value)
    633     return out
    634

/Users/jtratner/projects/python/pandas/pandas/algos.so in pandas.algos.take_1d_object_object (pandas/algos.c:68489)()

IndexError: Out of bounds on buffer access (axis 0)

In [5]: mi
Out[5]:
MultiIndex(levels=[[u'a'], [u'a', u'b', u'c']],
           labels=[[1, 0, 3], [3, 1, 4]])

In [6]: mi.levels
Out[6]: FrozenList([[u'a'], [u'a', u'b', u'c']])

In [7]: mi.labels
Out[7]: FrozenList([[1, 0, 3], [3, 1, 4]])

Labels.max() needs to be <= len(levels) for each pair of levels and labels.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions