@@ -881,16 +881,7 @@ def set_levels(self, levels, level=None, inplace=None, verify_integrity=True):
881
881
if is_list_like (levels ) and not isinstance (levels , Index ):
882
882
levels = list (levels )
883
883
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" )
894
885
895
886
if inplace :
896
887
idx = self
@@ -1050,16 +1041,7 @@ def set_codes(self, codes, level=None, inplace=None, verify_integrity=True):
1050
1041
else :
1051
1042
inplace = False
1052
1043
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" )
1063
1045
1064
1046
if inplace :
1065
1047
idx = self
@@ -3870,3 +3852,20 @@ def _coerce_indexer_frozen(array_like, categories, copy: bool = False) -> np.nda
3870
3852
array_like = array_like .copy ()
3871
3853
array_like .flags .writeable = False
3872
3854
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