Skip to content

Commit fe68e48

Browse files
GH1217 Modify items/iterros/itertuples methods to return Iterator
1 parent cbb6723 commit fe68e48

File tree

4 files changed

+28
-12
lines changed

4 files changed

+28
-12
lines changed

pandas-stubs/core/frame.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,16 +328,16 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack):
328328
def shape(self) -> tuple[int, int]: ...
329329
@property
330330
def style(self) -> Styler: ...
331-
def items(self) -> Iterable[tuple[Hashable, Series]]: ...
332-
def iterrows(self) -> Iterable[tuple[Hashable, Series]]: ...
331+
def items(self) -> Iterator[tuple[Hashable, Series]]: ...
332+
def iterrows(self) -> Iterator[tuple[Hashable, Series]]: ...
333333
@overload
334334
def itertuples(
335335
self, index: _bool = ..., name: _str = ...
336-
) -> Iterable[_PandasNamedTuple]: ...
336+
) -> Iterator[_PandasNamedTuple]: ...
337337
@overload
338338
def itertuples(
339339
self, index: _bool = ..., name: None = None
340-
) -> Iterable[tuple[Any, ...]]: ...
340+
) -> Iterator[tuple[Any, ...]]: ...
341341
def __len__(self) -> int: ...
342342
@overload
343343
def dot(self, other: DataFrame | ArrayLike) -> Self: ...

pandas-stubs/core/series.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
615615
mode: Literal["w"] = ...,
616616
) -> _str: ...
617617
def to_xarray(self) -> xr.DataArray: ...
618-
def items(self) -> Iterable[tuple[Hashable, S1]]: ...
618+
def items(self) -> Iterator[tuple[Hashable, S1]]: ...
619619
def keys(self) -> Index: ...
620620
@overload
621621
def to_dict(self, *, into: type[dict] = ...) -> dict[Any, S1]: ...

tests/test_frame.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ def test_types_median() -> None:
599599
def test_types_iterrows() -> None:
600600
df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]})
601601
check(
602-
assert_type(df.iterrows(), "Iterable[tuple[Hashable, pd.Series]]"),
602+
assert_type(df.iterrows(), "Iterator[tuple[Hashable, pd.Series]]"),
603603
Iterable,
604604
tuple,
605605
)
@@ -608,24 +608,33 @@ def test_types_iterrows() -> None:
608608
def test_types_itertuples() -> None:
609609
df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]})
610610
check(
611-
assert_type(df.itertuples(), Iterable[_PandasNamedTuple]),
612-
Iterable,
611+
assert_type(df.itertuples(), Iterator[_PandasNamedTuple]),
612+
Iterator,
613613
_PandasNamedTuple,
614614
)
615615
check(
616616
assert_type(
617-
df.itertuples(index=False, name="Foobar"), Iterable[_PandasNamedTuple]
617+
df.itertuples(index=False, name="Foobar"), Iterator[_PandasNamedTuple]
618618
),
619-
Iterable,
619+
Iterator,
620620
_PandasNamedTuple,
621621
)
622622
check(
623-
assert_type(df.itertuples(index=False, name=None), Iterable[tuple[Any, ...]]),
624-
Iterable,
623+
assert_type(df.itertuples(index=False, name=None), Iterator[tuple[Any, ...]]),
624+
Iterator,
625625
object,
626626
)
627627

628628

629+
def test_frame_iterator() -> None:
630+
"""Test iterator methods for a dataframe GH1217."""
631+
df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]})
632+
633+
check(assert_type(next(df.items()), tuple[Hashable, "pd.Series"]), tuple)
634+
check(assert_type(next(df.iterrows()), tuple[Hashable, "pd.Series"]), tuple)
635+
check(assert_type(next(df.itertuples()), _PandasNamedTuple), _PandasNamedTuple)
636+
637+
629638
def test_types_sum() -> None:
630639
df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]})
631640
df.sum()

tests/test_series.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
from collections.abc import (
4+
Hashable,
45
Iterable,
56
Iterator,
67
Sequence,
@@ -3797,3 +3798,9 @@ def foo(sf: pd.Series) -> None:
37973798

37983799
foo(s)
37993800
check(assert_type(s + pd.Series([1]), pd.Series), pd.Series)
3801+
3802+
3803+
def test_series_items() -> None:
3804+
s = pd.Series(data=[1, 2, 3, 4], index=["cow", "coal", "coalesce", ""])
3805+
check(assert_type(next(s.items()), tuple[Hashable, int]), tuple)
3806+
check(assert_type(s.items(), Iterator[tuple[Hashable, int]]), Iterator)

0 commit comments

Comments
 (0)