|
71 | 71 | is_iterator,
|
72 | 72 | is_sequence,
|
73 | 73 | is_named_tuple)
|
74 |
| -from pandas.core.dtypes.generic import ABCSeries, ABCIndexClass |
| 74 | +from pandas.core.dtypes.generic import ABCSeries, ABCIndexClass, ABCMultiIndex |
75 | 75 | from pandas.core.dtypes.missing import isna, notna
|
76 | 76 |
|
77 | 77 | from pandas.core import algorithms
|
@@ -4166,37 +4166,31 @@ def set_index(self, keys, drop=True, append=False, inplace=False,
|
4166 | 4166 | names = []
|
4167 | 4167 | if append:
|
4168 | 4168 | names = [x for x in self.index.names]
|
4169 |
| - if isinstance(self.index, MultiIndex): |
| 4169 | + if isinstance(self.index, ABCMultiIndex): |
4170 | 4170 | for i in range(self.index.nlevels):
|
4171 | 4171 | arrays.append(self.index._get_level_values(i))
|
4172 | 4172 | else:
|
4173 | 4173 | arrays.append(self.index)
|
4174 | 4174 |
|
4175 | 4175 | to_remove = []
|
4176 | 4176 | for col in keys:
|
4177 |
| - if isinstance(col, MultiIndex): |
4178 |
| - # append all but the last column so we don't have to modify |
4179 |
| - # the end of this loop |
4180 |
| - for n in range(col.nlevels - 1): |
| 4177 | + if isinstance(col, ABCMultiIndex): |
| 4178 | + for n in range(col.nlevels): |
4181 | 4179 | arrays.append(col._get_level_values(n))
|
4182 |
| - |
4183 |
| - level = col._get_level_values(col.nlevels - 1) |
4184 | 4180 | names.extend(col.names)
|
4185 |
| - elif isinstance(col, Series): |
4186 |
| - level = col._values |
4187 |
| - names.append(col.name) |
4188 |
| - elif isinstance(col, Index): |
4189 |
| - level = col |
| 4181 | + elif isinstance(col, (ABCIndexClass, ABCSeries)): |
| 4182 | + # if Index then not MultiIndex (treated above) |
| 4183 | + arrays.append(col) |
4190 | 4184 | names.append(col.name)
|
4191 |
| - elif isinstance(col, (list, np.ndarray, Index)): |
4192 |
| - level = col |
| 4185 | + elif isinstance(col, (list, np.ndarray)): |
| 4186 | + arrays.append(col) |
4193 | 4187 | names.append(None)
|
| 4188 | + # from here, col can only be a column label |
4194 | 4189 | else:
|
4195 |
| - level = frame[col]._values |
| 4190 | + arrays.append(frame[col]._values) |
4196 | 4191 | names.append(col)
|
4197 | 4192 | if drop:
|
4198 | 4193 | to_remove.append(col)
|
4199 |
| - arrays.append(level) |
4200 | 4194 |
|
4201 | 4195 | index = ensure_index_from_sequences(arrays, names)
|
4202 | 4196 |
|
|
0 commit comments