Skip to content

Commit d0601f3

Browse files
authored
BUG: Use HashableT rather than Hashable to improve compat (#154)
Use HashableT so that any hashable object can be use in a list or iterator
1 parent 8fbe101 commit d0601f3

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ from pandas._typing import (
5858
FilePathOrBuffer,
5959
FilePathOrBytesBuffer,
6060
GroupByObjectNonScalar,
61+
HashableT,
6162
IgnoreRaise,
6263
IndexingInt,
6364
IndexLabel,
@@ -587,7 +588,7 @@ class DataFrame(NDFrame, OpsMixin):
587588
def set_index(
588589
self,
589590
keys: Union[
590-
Label, Series, Index, np.ndarray, Iterator[Hashable], List[Hashable]
591+
Label, Series, Index, np.ndarray, Iterator[HashableT], List[HashableT]
591592
],
592593
drop: _bool = ...,
593594
append: _bool = ...,
@@ -599,7 +600,7 @@ class DataFrame(NDFrame, OpsMixin):
599600
def set_index(
600601
self,
601602
keys: Union[
602-
Label, Series, Index, np.ndarray, Iterator[Hashable], List[Hashable]
603+
Label, Series, Index, np.ndarray, Iterator[HashableT], List[HashableT]
603604
],
604605
drop: _bool = ...,
605606
append: _bool = ...,
@@ -611,7 +612,7 @@ class DataFrame(NDFrame, OpsMixin):
611612
def set_index(
612613
self,
613614
keys: Union[
614-
Label, Series, Index, np.ndarray, Iterator[Hashable], List[Hashable]
615+
Label, Series, Index, np.ndarray, Iterator[HashableT], List[HashableT]
615616
],
616617
drop: _bool = ...,
617618
append: _bool = ...,
@@ -622,7 +623,7 @@ class DataFrame(NDFrame, OpsMixin):
622623
def set_index(
623624
self,
624625
keys: Union[
625-
Label, Series, Index, np.ndarray, Iterator[Hashable], List[Hashable]
626+
Label, Series, Index, np.ndarray, Iterator[HashableT], List[HashableT]
626627
],
627628
drop: _bool = ...,
628629
append: _bool = ...,

tests/test_frame.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# flake8: noqa: F841
2+
from __future__ import annotations
3+
24
import datetime
35
import io
46
from pathlib import Path
@@ -1305,3 +1307,43 @@ def test_groupby_result() -> None:
13051307

13061308
for kk, g in df.groupby("a"):
13071309
pass
1310+
1311+
1312+
def test_setitem_list():
1313+
# GH 153
1314+
lst1: list[str] = ["a", "b", "c"]
1315+
lst2: list[int] = [1, 2, 3]
1316+
lst3: list[float] = [4.0, 5.0, 6.0]
1317+
lst4: list[tuple[str, int]] = [("a", 1), ("b", 2), ("c", 3)]
1318+
lst5: list[complex] = [0 + 1j, 0 + 2j, 0 + 3j]
1319+
1320+
columns: list[Hashable] = [
1321+
"a",
1322+
"b",
1323+
"c",
1324+
1,
1325+
2,
1326+
3,
1327+
4.0,
1328+
5.0,
1329+
6.0,
1330+
("a", 1),
1331+
("b", 2),
1332+
("c", 3),
1333+
0 + 1j,
1334+
0 + 2j,
1335+
0 + 3j,
1336+
]
1337+
1338+
df = pd.DataFrame(np.empty((3, 15)), columns=columns)
1339+
1340+
check(assert_type(df.set_index(lst1), pd.DataFrame), pd.DataFrame)
1341+
check(assert_type(df.set_index(lst2), pd.DataFrame), pd.DataFrame)
1342+
check(assert_type(df.set_index(lst3), pd.DataFrame), pd.DataFrame)
1343+
check(assert_type(df.set_index(lst4), pd.DataFrame), pd.DataFrame)
1344+
check(assert_type(df.set_index(lst5), pd.DataFrame), pd.DataFrame)
1345+
1346+
iter1: Iterator[str] = (v for v in lst1)
1347+
iter2: Iterator[tuple[str, int]] = (v for v in lst4)
1348+
check(assert_type(df.set_index(iter1), pd.DataFrame), pd.DataFrame)
1349+
check(assert_type(df.set_index(iter2), pd.DataFrame), pd.DataFrame)

0 commit comments

Comments
 (0)