Skip to content

CLN: clean indexes/multi.py #29337

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 2, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 27 additions & 24 deletions pandas/core/indexes/multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -704,22 +704,23 @@ def _set_levels(
# This is NOT part of the levels property because it should be
# externally not allowed to set levels. User beware if you change
# _levels directly
if validate and len(levels) == 0:
raise ValueError("Must set non-zero number of levels.")
if validate and level is None and len(levels) != self.nlevels:
raise ValueError("Length of levels must match number of levels.")
if validate and level is not None and len(levels) != len(level):
raise ValueError("Length of levels must match length of level.")
if validate:
if len(levels) == 0:
raise ValueError("Must set non-zero number of levels.")
if level is None and len(levels) != self.nlevels:
raise ValueError("Length of levels must match number of levels.")
if level is not None and len(levels) != len(level):
raise ValueError("Length of levels must match length of level.")

if level is None:
new_levels = FrozenList(
ensure_index(lev, copy=copy)._shallow_copy() for lev in levels
)
else:
level = [self._get_level_number(l) for l in level]
level_numbers = [self._get_level_number(lev) for lev in level]
new_levels = list(self._levels)
for l, v in zip(level, levels):
new_levels[l] = ensure_index(v, copy=copy)._shallow_copy()
for lev_num, lev in zip(level_numbers, levels):
new_levels[lev_num] = ensure_index(lev, copy=copy)._shallow_copy()
new_levels = FrozenList(new_levels)

if verify_integrity:
Expand Down Expand Up @@ -825,22 +826,23 @@ def labels(self):
def _set_codes(
self, codes, level=None, copy=False, validate=True, verify_integrity=False
):
if validate and level is None and len(codes) != self.nlevels:
raise ValueError("Length of codes must match number of levels")
if validate and level is not None and len(codes) != len(level):
raise ValueError("Length of codes must match length of levels.")
if validate:
if level is None and len(codes) != self.nlevels:
raise ValueError("Length of codes must match number of levels")
if level is not None and len(codes) != len(level):
raise ValueError("Length of codes must match length of levels.")

if level is None:
new_codes = FrozenList(
_ensure_frozen(level_codes, lev, copy=copy)._shallow_copy()
for lev, level_codes in zip(self._levels, codes)
)
else:
level = [self._get_level_number(l) for l in level]
level_numbers = [self._get_level_number(lev) for lev in level]
new_codes = list(self._codes)
for lev_idx, level_codes in zip(level, codes):
lev = self.levels[lev_idx]
new_codes[lev_idx] = _ensure_frozen(
for lev_num, level_codes in zip(level_numbers, codes):
lev = self.levels[lev_num]
new_codes[lev_num] = _ensure_frozen(
level_codes, lev, copy=copy
)._shallow_copy()
new_codes = FrozenList(new_codes)
Expand Down Expand Up @@ -1253,17 +1255,18 @@ def _set_names(self, names, level=None, validate=True):
raise ValueError("Names should be list-like for a MultiIndex")
names = list(names)

if validate and level is not None and len(names) != len(level):
raise ValueError("Length of names must match length of level.")
if validate and level is None and len(names) != self.nlevels:
raise ValueError(
"Length of names must match number of levels in MultiIndex."
)
if validate:
if level is not None and len(names) != len(level):
raise ValueError("Length of names must match length of level.")
if level is None and len(names) != self.nlevels:
raise ValueError(
"Length of names must match number of levels in MultiIndex."
)

if level is None:
level = range(self.nlevels)
else:
level = [self._get_level_number(l) for l in level]
level = [self._get_level_number(lev) for lev in level]

# set the name
for lev, name in zip(level, names):
Expand Down