From 7ac5836b2a5ef276cc6cdca6c7a825545cfc2199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Diridollou?= Date: Fri, 14 Nov 2025 15:13:45 -0500 Subject: [PATCH 1/4] GH1488 Add overload for DataFrame.max when axis is None --- pandas-stubs/core/frame.pyi | 11 ++++++++++- tests/test_frame.py | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pandas-stubs/core/frame.pyi b/pandas-stubs/core/frame.pyi index 3c5b2010b..1a91f717c 100644 --- a/pandas-stubs/core/frame.pyi +++ b/pandas-stubs/core/frame.pyi @@ -2344,9 +2344,18 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack): axis: Axis | None = ..., level: Level | None = None, ) -> Self: ... + @overload def max( self, - axis: Axis | None = 0, + axis: None, + skipna: _bool | None = True, + numeric_only: _bool = False, + **kwargs: Any, + ) -> Scalar: ... + @overload + def max( + self, + axis: Axis = 0, skipna: _bool | None = True, numeric_only: _bool = False, **kwargs: Any, diff --git a/tests/test_frame.py b/tests/test_frame.py index 521d4b896..e52d53c58 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -826,6 +826,7 @@ def test_types_max() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.max(), pd.Series), pd.Series) check(assert_type(df.max(axis=0), pd.Series), pd.Series) + check(assert_type(df.max(axis=None), Scalar), np.int64) def test_types_quantile() -> None: From 54882b319a570ea14357d36ac5c93e2272b5f7bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Diridollou?= Date: Sat, 15 Nov 2025 20:32:10 -0500 Subject: [PATCH 2/4] GH1488 PR feedback --- pandas-stubs/core/frame.pyi | 33 ++++++++++++++++++++++++++++++--- tests/series/test_series.py | 8 ++++---- tests/test_frame.py | 3 +++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/pandas-stubs/core/frame.pyi b/pandas-stubs/core/frame.pyi index 1a91f717c..df25e8b90 100644 --- a/pandas-stubs/core/frame.pyi +++ b/pandas-stubs/core/frame.pyi @@ -2360,23 +2360,50 @@ class DataFrame(NDFrame, OpsMixin, _GetItemHack): numeric_only: _bool = False, **kwargs: Any, ) -> Series: ... + @overload def mean( self, - axis: Axis | None = 0, + axis: None, + skipna: _bool | None = True, + numeric_only: _bool = False, + **kwargs: Any, + ) -> Scalar: ... + @overload + def mean( + self, + axis: Axis = 0, skipna: _bool | None = True, numeric_only: _bool = False, **kwargs: Any, ) -> Series: ... + @overload def median( self, - axis: Axis | None = 0, + axis: None, + skipna: _bool | None = True, + numeric_only: _bool = False, + **kwargs: Any, + ) -> Scalar: ... + @overload + def median( + self, + axis: Axis = 0, skipna: _bool | None = True, numeric_only: _bool = False, **kwargs: Any, ) -> Series: ... + @overload def min( self, - axis: Axis | None = 0, + axis: None, + skipna: _bool | None = True, + numeric_only: _bool = False, + **kwargs: Any, + ) -> Scalar: ... + @overload + def min( + self, + axis: Axis = 0, skipna: _bool | None = True, numeric_only: _bool = False, **kwargs: Any, diff --git a/tests/series/test_series.py b/tests/series/test_series.py index 4e34a712e..fa09d12ed 100644 --- a/tests/series/test_series.py +++ b/tests/series/test_series.py @@ -578,10 +578,10 @@ def test_types_cumsum() -> None: def test_types_min() -> None: s = pd.Series([1, 2, 3, np.nan]) - s.min() - s.min(axis=0) - s.groupby(level=0).min() - s.min(skipna=False) + check(assert_type(s.min(), float), np.floating) + check(assert_type(s.min(axis=0), float), np.floating) + check(assert_type(s.groupby(level=0).min(), "pd.Series[float]"), pd.Series, np.floating) + check(assert_type(s.min(skipna=False), float), np.floating) def test_types_max() -> None: diff --git a/tests/test_frame.py b/tests/test_frame.py index e52d53c58..272d20f45 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -713,6 +713,7 @@ def test_types_mean() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.mean(), pd.Series), pd.Series) check(assert_type(df.mean(axis=0), pd.Series), pd.Series) + check(assert_type(df.mean(axis=None), Scalar), np.float64) check(assert_type(df.groupby(level=0).mean(), pd.DataFrame), pd.DataFrame) check( assert_type(df.mean(axis=1, skipna=True, numeric_only=False), pd.Series), @@ -724,6 +725,7 @@ def test_types_median() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.median(), pd.Series), pd.Series) check(assert_type(df.median(axis=0), pd.Series), pd.Series) + check(assert_type(df.median(axis=None), Scalar), np.float64) check(assert_type(df.groupby(level=0).median(), pd.DataFrame), pd.DataFrame) check( assert_type(df.median(axis=1, skipna=True, numeric_only=False), pd.Series), @@ -820,6 +822,7 @@ def test_types_min() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.min(), pd.Series), pd.Series) check(assert_type(df.min(axis=0), pd.Series), pd.Series) + check(assert_type(df.min(axis=None), Scalar), np.int64) def test_types_max() -> None: From f5e2d5b5e2a129ea1c1b70cd61fb1b2d7a81436b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Diridollou?= Date: Sat, 15 Nov 2025 20:34:25 -0500 Subject: [PATCH 3/4] GH1488 PR feedback --- tests/series/test_series.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/series/test_series.py b/tests/series/test_series.py index fa09d12ed..7b0cb0615 100644 --- a/tests/series/test_series.py +++ b/tests/series/test_series.py @@ -580,7 +580,11 @@ def test_types_min() -> None: s = pd.Series([1, 2, 3, np.nan]) check(assert_type(s.min(), float), np.floating) check(assert_type(s.min(axis=0), float), np.floating) - check(assert_type(s.groupby(level=0).min(), "pd.Series[float]"), pd.Series, np.floating) + check( + assert_type(s.groupby(level=0).min(), "pd.Series[float]"), + pd.Series, + np.floating, + ) check(assert_type(s.min(skipna=False), float), np.floating) From 908838788575adcafd695dc76490caee484f4660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Diridollou?= Date: Sun, 16 Nov 2025 21:12:53 -0500 Subject: [PATCH 4/4] GH1488 PR Feedback --- tests/test_frame.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_frame.py b/tests/test_frame.py index 272d20f45..0a8a33511 100644 --- a/tests/test_frame.py +++ b/tests/test_frame.py @@ -713,7 +713,7 @@ def test_types_mean() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.mean(), pd.Series), pd.Series) check(assert_type(df.mean(axis=0), pd.Series), pd.Series) - check(assert_type(df.mean(axis=None), Scalar), np.float64) + check(assert_type(df.mean(axis=None), Scalar), np.floating) check(assert_type(df.groupby(level=0).mean(), pd.DataFrame), pd.DataFrame) check( assert_type(df.mean(axis=1, skipna=True, numeric_only=False), pd.Series), @@ -725,7 +725,7 @@ def test_types_median() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.median(), pd.Series), pd.Series) check(assert_type(df.median(axis=0), pd.Series), pd.Series) - check(assert_type(df.median(axis=None), Scalar), np.float64) + check(assert_type(df.median(axis=None), Scalar), np.floating) check(assert_type(df.groupby(level=0).median(), pd.DataFrame), pd.DataFrame) check( assert_type(df.median(axis=1, skipna=True, numeric_only=False), pd.Series), @@ -822,14 +822,14 @@ def test_types_min() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.min(), pd.Series), pd.Series) check(assert_type(df.min(axis=0), pd.Series), pd.Series) - check(assert_type(df.min(axis=None), Scalar), np.int64) + check(assert_type(df.min(axis=None), Scalar), np.integer) def test_types_max() -> None: df = pd.DataFrame(data={"col1": [2, 1], "col2": [3, 4]}) check(assert_type(df.max(), pd.Series), pd.Series) check(assert_type(df.max(axis=0), pd.Series), pd.Series) - check(assert_type(df.max(axis=None), Scalar), np.int64) + check(assert_type(df.max(axis=None), Scalar), np.integer) def test_types_quantile() -> None: