Skip to content

Commit c41f584

Browse files
committed
Reorganise MultiIndex.set_level
1 parent 9355643 commit c41f584

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
@@ -236,24 +236,27 @@ def set_levels(self, levels, level=None, inplace=False,
236236
names=[u'foo', u'bar'])
237237
"""
238238

239-
if not (level is None or is_list_like(level)):
239+
level_list_like = level is None or is_list_like(level)
240+
levels_list_like = (levels != [] and
241+
is_list_like(levels) and
242+
all(is_list_like(x) for x in levels))
243+
244+
if level_list_like:
245+
# level is a list-like object 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 levels_list_like:
250+
raise TypeError(levels_error)
251+
elif not level_list_like:
240252
# level is a scalar
241253
levels_error = ("`levels` and `level` are incompatible. "
242254
"When `level` is a scalar, `levels` must be a "
243255
" list-like object of scalars.")
244-
if not is_list_like(levels):
245-
raise TypeError(levels_error)
246-
if any(is_list_like(x) for x in levels):
256+
if levels_list_like:
247257
raise TypeError(levels_error)
248258
level = [level]
249259
levels = [levels]
250-
elif level is None or is_list_like(level):
251-
# level is a sequence of scalars
252-
levels_error = ("`levels` and `level` are incompatible. "
253-
"When `level` is list-like, `levels` must be a "
254-
"list-like object containing list-like objects")
255-
if not (is_list_like(levels) and all(is_list_like(x) for x in levels)):
256-
raise TypeError(levels_error)
257260

258261
if inplace:
259262
idx = self

0 commit comments

Comments
 (0)