From 8794b35d5eb8a7fd7d813fdcc073eed995284a9d Mon Sep 17 00:00:00 2001 From: Stephen Randall Date: Fri, 20 Jun 2025 00:27:09 -0400 Subject: [PATCH 1/3] update types, add tests --- pandas-stubs/core/frame.pyi | 6 +++--- pandas-stubs/core/series.pyi | 2 +- tests/test_frame.py | 7 +++++++ tests/test_series.py | 13 ++++++++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/pandas-stubs/core/frame.pyi b/pandas-stubs/core/frame.pyi index 2a9875d8..90560dc2 100644 --- a/pandas-stubs/core/frame.pyi +++ b/pandas-stubs/core/frame.pyi @@ -1317,18 +1317,18 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack): ) -> Self: ... @overload def stack( - self, level: Level | list[Level] = ..., dropna: _bool = ..., sort: _bool = ... + self, level: IndexLabel = ..., dropna: _bool = ..., sort: _bool = ... ) -> Self | Series: ... @overload def stack( - self, level: Level | list[Level] = ..., future_stack: _bool = ... + self, level: IndexLabel = ..., future_stack: _bool = ... ) -> Self | Series: ... def explode( self, column: Sequence[Hashable], ignore_index: _bool = ... ) -> Self: ... def unstack( self, - level: Level = ..., + level: IndexLabel = ..., fill_value: Scalar | None = ..., sort: _bool = ..., ) -> Self | Series: ... diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index 22ef5c76..1982d54b 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -934,7 +934,7 @@ class Series(IndexOpsMixin[S1], NDFrame): def explode(self) -> Series[S1]: ... def unstack( self, - level: Level = ..., + level: IndexLabel = ..., fill_value: int | _str | dict | None = ..., ) -> DataFrame: ... @overload diff --git a/tests/test_frame.py b/tests/test_frame.py index a951c8aa..f11ba634 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -3124,6 +3124,12 @@ def test_frame_stack() -> None: assert_type(df_multi_level_cols2.stack(0), Union[pd.DataFrame, pd.Series]), pd.DataFrame, ) + check( + assert_type( + df_multi_level_cols2.stack([0]), Union[pd.DataFrame, pd.Series] + ), + pd.DataFrame, + ) check( assert_type( df_multi_level_cols2.stack([0, 1]), @@ -4461,6 +4467,7 @@ def test_unstack() -> None: ).set_index([0, 1]) check(assert_type(df.unstack(0), pd.DataFrame | pd.Series), pd.DataFrame) + check(assert_type(df.unstack([0]), pd.DataFrame | pd.Series), pd.DataFrame) check( assert_type( df.unstack(1, fill_value=pd.Timestamp(2023, 4, 5)), pd.DataFrame | pd.Series diff --git a/tests/test_series.py b/tests/test_series.py index a2ace21e..8b981070 100644 --- a/tests/test_series.py +++ b/tests/test_series.py @@ -3902,7 +3902,6 @@ def test_series_items() -> None: def test_cumsum_timedelta() -> None: - s = pd.Series(pd.to_timedelta([1, 2, 3], "h")) check(assert_type(s.cumsum(), "TimedeltaSeries"), pd.Series, pd.Timedelta) check( @@ -3910,3 +3909,15 @@ def test_cumsum_timedelta() -> None: pd.Series, pd.Timestamp, ) + + +def test_series_unstack() -> None: + df = pd.DataFrame([[1, 3, 5], [2, 4, 6]]) + s = df.transpose().stack([*range(df.index.nlevels)]) + check( + assert_type( + s.unstack([*range(s.index.nlevels // 2)]), + Union[pd.Series, pd.DataFrame], + ), + pd.DataFrame, + ) From be32ee12d99485329340a03a2a61694f1b419040 Mon Sep 17 00:00:00 2001 From: Stephen Randall Date: Fri, 20 Jun 2025 00:31:10 -0400 Subject: [PATCH 2/3] remove unnecessary test --- tests/test_frame.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/test_frame.py b/tests/test_frame.py index f11ba634..d58bd7f8 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -3124,12 +3124,6 @@ def test_frame_stack() -> None: assert_type(df_multi_level_cols2.stack(0), Union[pd.DataFrame, pd.Series]), pd.DataFrame, ) - check( - assert_type( - df_multi_level_cols2.stack([0]), Union[pd.DataFrame, pd.Series] - ), - pd.DataFrame, - ) check( assert_type( df_multi_level_cols2.stack([0, 1]), From 486f88875baf1c4ac14d5993f79392b6d382dca9 Mon Sep 17 00:00:00 2001 From: Stephen Randall Date: Fri, 20 Jun 2025 16:38:22 -0400 Subject: [PATCH 3/3] added check --- tests/test_series.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_series.py b/tests/test_series.py index 8b981070..3f25d981 100644 --- a/tests/test_series.py +++ b/tests/test_series.py @@ -3914,6 +3914,7 @@ def test_cumsum_timedelta() -> None: def test_series_unstack() -> None: df = pd.DataFrame([[1, 3, 5], [2, 4, 6]]) s = df.transpose().stack([*range(df.index.nlevels)]) + check(assert_type(s, Union[pd.Series, pd.DataFrame]), pd.Series) check( assert_type( s.unstack([*range(s.index.nlevels // 2)]),