Skip to content

Commit d0252ab

Browse files
iasoonyehoshuadimarsky
authored andcommitted
TYP: fix MultiIndex._names type (pandas-dev#46919)
1 parent 70adde1 commit d0252ab

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

pandas/core/frame.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -10420,12 +10420,14 @@ def _count_level(self, level: Level, axis: int = 0, numeric_only: bool = False):
1042010420
else:
1042110421
mask = index_mask.reshape(-1, 1) & values_mask
1042210422

10423-
if isinstance(level, str):
10424-
level = count_axis._get_level_number(level)
10423+
if isinstance(level, int):
10424+
level_number = level
10425+
else:
10426+
level_number = count_axis._get_level_number(level)
1042510427

10426-
level_name = count_axis._names[level]
10427-
level_index = count_axis.levels[level]._rename(name=level_name)
10428-
level_codes = ensure_platform_int(count_axis.codes[level])
10428+
level_name = count_axis._names[level_number]
10429+
level_index = count_axis.levels[level_number]._rename(name=level_name)
10430+
level_codes = ensure_platform_int(count_axis.codes[level_number])
1042910431
counts = lib.count_level_2d(mask, level_codes, len(level_index), axis=axis)
1043010432

1043110433
if axis == 1:

pandas/core/indexes/multi.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ class MultiIndex(Index):
287287

288288
# initialize to zero-length tuples to make everything work
289289
_typ = "multiindex"
290-
_names = FrozenList()
290+
_names: list[Hashable | None] = []
291291
_levels = FrozenList()
292292
_codes = FrozenList()
293293
_comparables = ["names"]
@@ -326,9 +326,7 @@ def __new__(
326326
result._set_levels(levels, copy=copy, validate=False)
327327
result._set_codes(codes, copy=copy, validate=False)
328328

329-
# Incompatible types in assignment (expression has type "List[None]",
330-
# variable has type "FrozenList") [assignment]
331-
result._names = [None] * len(levels) # type: ignore[assignment]
329+
result._names = [None] * len(levels)
332330
if names is not None:
333331
# handles name validation
334332
result._set_names(names)
@@ -1476,8 +1474,7 @@ def _set_names(self, names, *, level=None, validate: bool = True):
14761474
raise TypeError(
14771475
f"{type(self).__name__}.name must be a hashable type"
14781476
)
1479-
# error: Cannot determine type of '__setitem__'
1480-
self._names[lev] = name # type: ignore[has-type]
1477+
self._names[lev] = name
14811478

14821479
# If .levels has been accessed, the names in our cache will be stale.
14831480
self._reset_cache()

0 commit comments

Comments
 (0)