Skip to content

Commit 0ffe210

Browse files
committed
address issue pandas-dev#16147
1 parent e3a1f4d commit 0ffe210

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

pandas/core/indexes/multi.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,16 +229,25 @@ def set_levels(self, levels, level=None, inplace=False,
229229
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
230230
names=[u'foo', u'bar'])
231231
"""
232-
if level is not None and not is_list_like(level):
232+
233+
if not (level is None or is_list_like(level)):
234+
# level is a scalar
235+
levels_error = ("`levels` and `level` are incompatible. "
236+
"When `level` is a scalar, `levels` must be a "
237+
" list-like object of scalars.")
233238
if not is_list_like(levels):
234-
raise TypeError("Levels must be list-like")
235-
if is_list_like(levels[0]):
236-
raise TypeError("Levels must be list-like")
239+
raise TypeError(levels_error)
240+
if any(is_list_like(x) for x in levels):
241+
raise TypeError(levels_error)
237242
level = [level]
238243
levels = [levels]
239244
elif level is None or is_list_like(level):
240-
if not is_list_like(levels) or not is_list_like(levels[0]):
241-
raise TypeError("Levels must be list of lists-like")
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)
242251

243252
if inplace:
244253
idx = self

0 commit comments

Comments
 (0)