Skip to content

Commit 6d80717

Browse files
authored
REF: de-duplicate MultiIndex validation (#39425)
1 parent ea906c3 commit 6d80717

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

pandas/core/indexes/multi.py

+19-20
Original file line numberDiff line numberDiff line change
@@ -881,16 +881,7 @@ def set_levels(self, levels, level=None, inplace=None, verify_integrity=True):
881881
if is_list_like(levels) and not isinstance(levels, Index):
882882
levels = list(levels)
883883

884-
if level is not None and not is_list_like(level):
885-
if not is_list_like(levels):
886-
raise TypeError("Levels must be list-like")
887-
if is_list_like(levels[0]):
888-
raise TypeError("Levels must be list-like")
889-
level = [level]
890-
levels = [levels]
891-
elif level is None or is_list_like(level):
892-
if not is_list_like(levels) or not is_list_like(levels[0]):
893-
raise TypeError("Levels must be list of lists-like")
884+
level, levels = _require_listlike(level, levels, "Levels")
894885

895886
if inplace:
896887
idx = self
@@ -1050,16 +1041,7 @@ def set_codes(self, codes, level=None, inplace=None, verify_integrity=True):
10501041
else:
10511042
inplace = False
10521043

1053-
if level is not None and not is_list_like(level):
1054-
if not is_list_like(codes):
1055-
raise TypeError("Codes must be list-like")
1056-
if is_list_like(codes[0]):
1057-
raise TypeError("Codes must be list-like")
1058-
level = [level]
1059-
codes = [codes]
1060-
elif level is None or is_list_like(level):
1061-
if not is_list_like(codes) or not is_list_like(codes[0]):
1062-
raise TypeError("Codes must be list of lists-like")
1044+
level, codes = _require_listlike(level, codes, "Codes")
10631045

10641046
if inplace:
10651047
idx = self
@@ -3870,3 +3852,20 @@ def _coerce_indexer_frozen(array_like, categories, copy: bool = False) -> np.nda
38703852
array_like = array_like.copy()
38713853
array_like.flags.writeable = False
38723854
return array_like
3855+
3856+
3857+
def _require_listlike(level, arr, arrname: str):
3858+
"""
3859+
Ensure that level is either None or listlike, and arr is list-of-listlike.
3860+
"""
3861+
if level is not None and not is_list_like(level):
3862+
if not is_list_like(arr):
3863+
raise TypeError(f"{arrname} must be list-like")
3864+
if is_list_like(arr[0]):
3865+
raise TypeError(f"{arrname} must be list-like")
3866+
level = [level]
3867+
arr = [arr]
3868+
elif level is None or is_list_like(level):
3869+
if not is_list_like(arr) or not is_list_like(arr[0]):
3870+
raise TypeError(f"{arrname} must be list of lists-like")
3871+
return level, arr

0 commit comments

Comments
 (0)