Skip to content

BUG: factorize_from_iterables applies type to empty iterables #16844

Closed
@drudd

Description

@drudd

Code Sample, a copy-pastable example if possible

In [1]: import pandas as pd

In [2]: A = pd.MultiIndex(levels=[[], []], labels=[[], []], names=['a', 'b'])

In [3]: B = pd.MultiIndex.from_arrays(arrays=[[], []], names=['a', 'b'])

In [4]: A
Out[4]:
MultiIndex(levels=[[], []],
           labels=[[], []],
           names=[u'a', u'b'])

In [5]: B
Out[5]:
MultiIndex(levels=[[], []],
           labels=[[], []],
           names=[u'a', u'b'])

In [6]: pd.testing.assert_index_equal(A, B)
...
AssertionError: MultiIndex level [0] are different

MultiIndex level [0] classes are not equivalent
[left]:  Index([], dtype='object', name=u'a')
[right]: Float64Index([], dtype='float64', name=u'a')

Problem description

Empty iterables should be factorized to object types rather than Float64Index. This causes MultiIndexes created from the constructor to not equal those created using .from_arrays, which relies on factorization (ref PR #16782).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions