Skip to content

Commit c929175

Browse files
GH804 Fix property setter/getter for Index.names
1 parent ae72ced commit c929175

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

pandas-stubs/core/indexes/base.pyi

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ from pandas._typing import (
5555
MaskType,
5656
NaPosition,
5757
ReindexMethod,
58+
SequenceNotStr,
5859
SliceType,
5960
TimedeltaDtypeArg,
6061
TimestampDtypeArg,
@@ -306,13 +307,13 @@ class Index(IndexOpsMixin[S1]):
306307
def to_series(self, index=..., name: Hashable = ...) -> Series: ...
307308
def to_frame(self, index: bool = ..., name=...) -> DataFrame: ...
308309
@property
309-
def name(self) -> Hashable | None: ...
310+
def name(self) -> _str | None: ...
310311
@name.setter
311312
def name(self, value) -> None: ...
312313
@property
313-
def names(self) -> list[Hashable]: ...
314+
def names(self) -> list[_str | None]: ...
314315
@names.setter
315-
def names(self, names: Sequence[Hashable]) -> None: ...
316+
def names(self, names: SequenceNotStr[_str | None]) -> None: ...
316317
def set_names(self, names, *, level=..., inplace: bool = ...): ...
317318
@overload
318319
def rename(self, name, *, inplace: Literal[False] = False) -> Self: ...

tests/test_indexes.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,3 +1435,21 @@ def test_multiindex_range() -> None:
14351435
[range(3), pd.Series([2, 3, 5])],
14361436
)
14371437
check(assert_type(midx_mixed_types, pd.MultiIndex), pd.MultiIndex)
1438+
1439+
1440+
def test_index_naming() -> None:
1441+
"""
1442+
Test index names type both for the getter and the setter.
1443+
The names of an index should be settable with a sequence (not str) and names
1444+
property is a list[str | None] (FrozenList).
1445+
"""
1446+
df = pd.DataFrame({"a": ["a", "b", "c"], "i": [10, 11, 12]})
1447+
1448+
df.index.names = ["idx"]
1449+
check(assert_type(df.index.names, list[str | None]), list)
1450+
df.index.names = ("idx2",)
1451+
check(assert_type(df.index.names, list[str | None]), list)
1452+
df.index.names = [None]
1453+
check(assert_type(df.index.names, list[str | None]), list)
1454+
df.index.names = (None,)
1455+
check(assert_type(df.index.names, list[str | None]), list)

0 commit comments

Comments
 (0)