Skip to content

Commit 6abc1cf

Browse files
committed
Reorganise MultiIndex.set_level
1 parent 0ffe210 commit 6abc1cf

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

pandas/core/indexes/multi.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -230,24 +230,27 @@ def set_levels(self, levels, level=None, inplace=False,
230230
names=[u'foo', u'bar'])
231231
"""
232232

233-
if not (level is None or is_list_like(level)):
233+
level_list_like = level is None or is_list_like(level)
234+
levels_list_like = (levels != [] and
235+
is_list_like(levels) and
236+
all(is_list_like(x) for x in levels))
237+
238+
if level_list_like:
239+
# level is a list-like object of scalars
240+
levels_error = ("`levels` and `level` are incompatible. "
241+
"When `level` is list-like, `levels` must be a "
242+
"list-like object containing list-like objects")
243+
if not levels_list_like:
244+
raise TypeError(levels_error)
245+
elif not level_list_like:
234246
# level is a scalar
235247
levels_error = ("`levels` and `level` are incompatible. "
236248
"When `level` is a scalar, `levels` must be a "
237249
" list-like object of scalars.")
238-
if not is_list_like(levels):
239-
raise TypeError(levels_error)
240-
if any(is_list_like(x) for x in levels):
250+
if levels_list_like:
241251
raise TypeError(levels_error)
242252
level = [level]
243253
levels = [levels]
244-
elif level is None or is_list_like(level):
245-
# level is a sequence of scalars
246-
levels_error = ("`levels` and `level` are incompatible. "
247-
"When `level` is list-like, `levels` must be a "
248-
"list-like object containing list-like objects")
249-
if not (is_list_like(levels) and all(is_list_like(x) for x in levels)):
250-
raise TypeError(levels_error)
251254

252255
if inplace:
253256
idx = self

0 commit comments

Comments
 (0)