Skip to content

Commit f94d2b4

Browse files
Douglas Ruddjreback
Douglas Rudd
authored andcommitted
Revert ability to construct MultiIndex from empty arrays, ensure all tests pass despite issue pandas-dev#16844
1 parent c84f0bc commit f94d2b4

File tree

2 files changed

+11
-16
lines changed

2 files changed

+11
-16
lines changed

pandas/core/indexes/multi.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,9 @@ def from_arrays(cls, arrays, sortorder=None, names=None):
10831083
MultiIndex.from_product : Make a MultiIndex from cartesian product
10841084
of iterables
10851085
"""
1086-
if len(arrays) == 1:
1086+
if len(arrays) == 0:
1087+
raise ValueError('Must pass non-zero number of levels/labels')
1088+
elif len(arrays) == 1:
10871089
name = None if names is None else names[0]
10881090
return Index(arrays[0], name=name)
10891091

@@ -1131,10 +1133,12 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
11311133
MultiIndex.from_product : Make a MultiIndex from cartesian product
11321134
of iterables
11331135
"""
1134-
if len(tuples) == 0 and names is None:
1135-
raise TypeError('Cannot infer number of levels from empty list')
1136-
1137-
if isinstance(tuples, (np.ndarray, Index)):
1136+
if len(tuples) == 0:
1137+
if names is None:
1138+
msg = 'Cannot infer number of levels from empty list'
1139+
raise TypeError(msg)
1140+
arrays = [[]]*len(names)
1141+
elif isinstance(tuples, (np.ndarray, Index)):
11381142
if isinstance(tuples, Index):
11391143
tuples = tuples._values
11401144

pandas/tests/indexes/test_multi.py

+2-11
Original file line numberDiff line numberDiff line change
@@ -766,14 +766,6 @@ def test_from_arrays_empty(self):
766766
ValueError, "Must pass non-zero number of levels/labels"):
767767
MultiIndex.from_arrays(arrays=[])
768768

769-
# 0 levels, names defined
770-
result = MultiIndex.from_arrays(arrays=[],
771-
names=['A', 'B'])
772-
expected = MultiIndex(levels=[[], []],
773-
labels=[[], []],
774-
names=['A', 'B'])
775-
tm.assert_index_equal(result, expected)
776-
777769
# 1 level
778770
result = MultiIndex.from_arrays(arrays=[[]], names=['A'])
779771
expected = Index([], name='A')
@@ -1726,9 +1718,8 @@ def test_from_tuples(self):
17261718
MultiIndex.from_tuples, [])
17271719

17281720
result = MultiIndex.from_tuples([], names=['a', 'b'])
1729-
expected = MultiIndex(levels=[[], []],
1730-
labels=[[], []],
1731-
names=['a', 'b'])
1721+
expected = MultiIndex.from_arrays(arrays=[[], []],
1722+
names=['a', 'b'])
17321723
tm.assert_index_equal(result, expected)
17331724

17341725
idx = MultiIndex.from_tuples(((1, 2), (3, 4)), names=['a', 'b'])

0 commit comments

Comments
 (0)