Skip to content

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

@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