Skip to content

Commit 147fbe6

Browse files
authored
allow dict_items in DataFrame constructor. Clean up _ListLike (#191)
* allow dict_items in DataFrame constructor. Clean up _ListLike * Use Iterable instead of ItemsView
1 parent fed3be4 commit 147fbe6

File tree

3 files changed

+30
-27
lines changed

3 files changed

+30
-27
lines changed

pandas-stubs/_typing.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ SeriesAxisType = Literal["index", 0] # Restricted subset of _AxisType for serie
9898
AxisType = Literal["columns", "index", 0, 1]
9999
DtypeNp = TypeVar("DtypeNp", bound=np.dtype[np.generic])
100100
KeysArgType = Any
101-
ListLike = TypeVar("ListLike", Sequence, np.ndarray, "Series")
101+
ListLike = TypeVar("ListLike", Sequence, np.ndarray, "Series", "Index")
102102
StrLike = Union[str, np.str_]
103103
Scalar = Union[
104104
str,

pandas-stubs/core/frame.pyi

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ from typing import (
1111
Mapping,
1212
Pattern,
1313
Sequence,
14-
Union,
1514
overload,
1615
)
1716

@@ -61,6 +60,7 @@ from pandas._typing import (
6160
IndexType,
6261
Label,
6362
Level,
63+
ListLike,
6464
MaskType,
6565
Renamer,
6666
Scalar,
@@ -158,19 +158,16 @@ class _LocIndexerFrame(_LocIndexer):
158158
) -> None: ...
159159

160160
class DataFrame(NDFrame, OpsMixin):
161-
_ListLike = Union[
162-
np.ndarray,
163-
list[Dtype],
164-
dict[_str, np.ndarray],
165-
Sequence,
166-
Index,
167-
Series,
168-
]
161+
169162
__hash__: ClassVar[None] # type: ignore[assignment]
170163

171164
def __new__(
172165
cls,
173-
data: _ListLike | DataFrame | dict[Any, Any] | None = ...,
166+
data: ListLike
167+
| DataFrame
168+
| dict[Any, Any]
169+
| Iterable[tuple[Hashable, ListLike]]
170+
| None = ...,
174171
index: Axes | None = ...,
175172
columns: Axes | None = ...,
176173
dtype=...,
@@ -377,7 +374,7 @@ class DataFrame(NDFrame, OpsMixin):
377374
self,
378375
loc: int,
379376
column,
380-
value: int | _ListLike,
377+
value: int | ListLike,
381378
allow_duplicates: _bool = ...,
382379
) -> None: ...
383380
def assign(self, **kwargs) -> DataFrame: ...
@@ -972,7 +969,7 @@ class DataFrame(NDFrame, OpsMixin):
972969
| Series
973970
| dict[Any, Any]
974971
| Sequence[Scalar]
975-
| Sequence[_ListLike],
972+
| Sequence[ListLike],
976973
ignore_index: _bool = ...,
977974
verify_integrity: _bool = ...,
978975
sort: _bool = ...,
@@ -1081,7 +1078,7 @@ class DataFrame(NDFrame, OpsMixin):
10811078
def hist(
10821079
self,
10831080
column: _str | list[_str] | None = ...,
1084-
by: _str | _ListLike | None = ...,
1081+
by: _str | ListLike | None = ...,
10851082
grid: _bool = ...,
10861083
xlabelsize: int | None = ...,
10871084
xrot: float | None = ...,
@@ -1099,7 +1096,7 @@ class DataFrame(NDFrame, OpsMixin):
10991096
def boxplot(
11001097
self,
11011098
column: _str | list[_str] | None = ...,
1102-
by: _str | _ListLike | None = ...,
1099+
by: _str | ListLike | None = ...,
11031100
ax: PlotAxes | None = ...,
11041101
fontsize: float | _str | None = ...,
11051102
rot: int = ...,
@@ -1154,7 +1151,7 @@ class DataFrame(NDFrame, OpsMixin):
11541151
def abs(self) -> DataFrame: ...
11551152
def add(
11561153
self,
1157-
other: num | _ListLike | DataFrame,
1154+
other: num | ListLike | DataFrame,
11581155
axis: AxisType | None = ...,
11591156
level: Level | None = ...,
11601157
fill_value: float | None = ...,
@@ -1277,14 +1274,14 @@ class DataFrame(NDFrame, OpsMixin):
12771274
) -> DataFrame: ...
12781275
def div(
12791276
self,
1280-
other: num | _ListLike | DataFrame,
1277+
other: num | ListLike | DataFrame,
12811278
axis: AxisType | None = ...,
12821279
level: Level | None = ...,
12831280
fill_value: float | None = ...,
12841281
) -> DataFrame: ...
12851282
def divide(
12861283
self,
1287-
other: num | _ListLike | DataFrame,
1284+
other: num | ListLike | DataFrame,
12881285
axis: AxisType | None = ...,
12891286
level: Level | None = ...,
12901287
fill_value: float | None = ...,
@@ -1339,7 +1336,7 @@ class DataFrame(NDFrame, OpsMixin):
13391336
def first_valid_index(self) -> Scalar: ...
13401337
def floordiv(
13411338
self,
1342-
other: num | _ListLike | DataFrame,
1339+
other: num | ListLike | DataFrame,
13431340
axis: AxisType | None = ...,
13441341
level: Level | None = ...,
13451342
fill_value: float | None = ...,
@@ -1555,21 +1552,21 @@ class DataFrame(NDFrame, OpsMixin):
15551552
) -> Series: ...
15561553
def mod(
15571554
self,
1558-
other: num | _ListLike | DataFrame,
1555+
other: num | ListLike | DataFrame,
15591556
axis: AxisType | None = ...,
15601557
level: Level | None = ...,
15611558
fill_value: float | None = ...,
15621559
) -> DataFrame: ...
15631560
def mul(
15641561
self,
1565-
other: num | _ListLike | DataFrame,
1562+
other: num | ListLike | DataFrame,
15661563
axis: AxisType | None = ...,
15671564
level: Level | None = ...,
15681565
fill_value: float | None = ...,
15691566
) -> DataFrame: ...
15701567
def multiply(
15711568
self,
1572-
other: num | _ListLike | DataFrame,
1569+
other: num | ListLike | DataFrame,
15731570
axis: AxisType | None = ...,
15741571
level: Level | None = ...,
15751572
fill_value: float | None = ...,
@@ -1594,7 +1591,7 @@ class DataFrame(NDFrame, OpsMixin):
15941591
def pop(self, item: _str) -> Series: ...
15951592
def pow(
15961593
self,
1597-
other: num | _ListLike | DataFrame,
1594+
other: num | ListLike | DataFrame,
15981595
axis: AxisType | None = ...,
15991596
level: Level | None = ...,
16001597
fill_value: float | None = ...,
@@ -1785,7 +1782,7 @@ class DataFrame(NDFrame, OpsMixin):
17851782
n: int | None = ...,
17861783
frac: float | None = ...,
17871784
replace: _bool = ...,
1788-
weights: _str | _ListLike | np.ndarray | None = ...,
1785+
weights: _str | ListLike | None = ...,
17891786
random_state: int | None = ...,
17901787
axis: SeriesAxisType | None = ...,
17911788
ignore_index: _bool = ...,
@@ -1872,14 +1869,14 @@ class DataFrame(NDFrame, OpsMixin):
18721869
) -> Series: ...
18731870
def sub(
18741871
self,
1875-
other: num | _ListLike | DataFrame,
1872+
other: num | ListLike | DataFrame,
18761873
axis: AxisType | None = ...,
18771874
level: Level | None = ...,
18781875
fill_value: float | None = ...,
18791876
) -> DataFrame: ...
18801877
def subtract(
18811878
self,
1882-
other: num | _ListLike | DataFrame,
1879+
other: num | ListLike | DataFrame,
18831880
axis: AxisType | None = ...,
18841881
level: Level | None = ...,
18851882
fill_value: float | None = ...,
@@ -2089,7 +2086,7 @@ class DataFrame(NDFrame, OpsMixin):
20892086
def to_xarray(self): ...
20902087
def truediv(
20912088
self,
2092-
other: num | _ListLike | DataFrame,
2089+
other: num | ListLike | DataFrame,
20932090
axis: AxisType | None = ...,
20942091
level: Level | None = ...,
20952092
fill_value: float | None = ...,

tests/test_frame.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,3 +1579,9 @@ def test_resample() -> None:
15791579
check(assert_type(df.resample("2T").sem(), pd.DataFrame), pd.DataFrame)
15801580
check(assert_type(df.resample("2T").median(), pd.DataFrame), pd.DataFrame)
15811581
check(assert_type(df.resample("2T").ohlc(), pd.DataFrame), pd.DataFrame)
1582+
1583+
1584+
def test_dict_items() -> None:
1585+
# GH 180
1586+
x = {"a": [1]}
1587+
check(assert_type(pd.DataFrame(x.items()), pd.DataFrame), pd.DataFrame)

0 commit comments

Comments
 (0)