diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 51ca9dbd763b4..6b7aca1b6c4ee 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -10420,12 +10420,14 @@ def _count_level(self, level: Level, axis: int = 0, numeric_only: bool = False): else: mask = index_mask.reshape(-1, 1) & values_mask - if isinstance(level, str): - level = count_axis._get_level_number(level) + if isinstance(level, int): + level_number = level + else: + level_number = count_axis._get_level_number(level) - level_name = count_axis._names[level] - level_index = count_axis.levels[level]._rename(name=level_name) - level_codes = ensure_platform_int(count_axis.codes[level]) + level_name = count_axis._names[level_number] + level_index = count_axis.levels[level_number]._rename(name=level_name) + level_codes = ensure_platform_int(count_axis.codes[level_number]) counts = lib.count_level_2d(mask, level_codes, len(level_index), axis=axis) if axis == 1: diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 752ce28c58f55..29df930c5aaf3 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -287,7 +287,7 @@ class MultiIndex(Index): # initialize to zero-length tuples to make everything work _typ = "multiindex" - _names = FrozenList() + _names: list[Hashable | None] = [] _levels = FrozenList() _codes = FrozenList() _comparables = ["names"] @@ -326,9 +326,7 @@ def __new__( result._set_levels(levels, copy=copy, validate=False) result._set_codes(codes, copy=copy, validate=False) - # Incompatible types in assignment (expression has type "List[None]", - # variable has type "FrozenList") [assignment] - result._names = [None] * len(levels) # type: ignore[assignment] + result._names = [None] * len(levels) if names is not None: # handles name validation result._set_names(names) @@ -1476,8 +1474,7 @@ def _set_names(self, names, *, level=None, validate: bool = True): raise TypeError( f"{type(self).__name__}.name must be a hashable type" ) - # error: Cannot determine type of '__setitem__' - self._names[lev] = name # type: ignore[has-type] + self._names[lev] = name # If .levels has been accessed, the names in our cache will be stale. self._reset_cache()