diff --git a/pandas/core/base.py b/pandas/core/base.py index a1484d9ad032b..492986faba4d3 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -8,6 +8,7 @@ from typing import ( TYPE_CHECKING, Any, + Callable, Generic, Literal, cast, @@ -106,7 +107,7 @@ class PandasObject(DirNamesMixin): _cache: dict[str, Any] @property - def _constructor(self): + def _constructor(self) -> Callable[..., Self]: """ Class constructor (for this class it's just `__class__`). """ @@ -802,7 +803,7 @@ def argmin( # "int") return result # type: ignore[return-value] - def tolist(self): + def tolist(self) -> list: """ Return a list of the values. diff --git a/pandas/core/frame.py b/pandas/core/frame.py index e48e5d9023f33..3cce697120cd2 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -10674,7 +10674,7 @@ def round( """ from pandas.core.reshape.concat import concat - def _dict_round(df: DataFrame, decimals): + def _dict_round(df: DataFrame, decimals) -> Iterator[Series]: for col, vals in df.items(): try: yield _series_round(vals, decimals[col]) @@ -11110,7 +11110,7 @@ def c(x): # ---------------------------------------------------------------------- # ndarray-like stats methods - def count(self, axis: Axis = 0, numeric_only: bool = False): + def count(self, axis: Axis = 0, numeric_only: bool = False) -> Series: """ Count non-NA cells for each column or row. @@ -11356,9 +11356,42 @@ def _reduce_axis1(self, name: str, func, skipna: bool) -> Series: res_ser = self._constructor_sliced(result, index=self.index, copy=False) return res_ser - @doc(make_doc("any", ndim=2)) # error: Signature of "any" incompatible with supertype "NDFrame" - def any( # type: ignore[override] + @overload # type: ignore[override] + def any( + self, + *, + axis: Axis = ..., + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def any( + self, + *, + axis: None, + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> bool: + ... + + @overload + def any( + self, + *, + axis: Axis | None, + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> Series | bool: + ... + + @doc(make_doc("any", ndim=2)) + def any( self, *, axis: Axis | None = 0, @@ -11373,6 +11406,39 @@ def any( # type: ignore[override] result = result.__finalize__(self, method="any") return result + @overload + def all( + self, + *, + axis: Axis = ..., + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def all( + self, + *, + axis: None, + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> bool: + ... + + @overload + def all( + self, + *, + axis: Axis | None, + bool_only: bool = ..., + skipna: bool = ..., + **kwargs, + ) -> Series | bool: + ... + @doc(make_doc("all", ndim=2)) def all( self, @@ -11388,6 +11454,40 @@ def all( result = result.__finalize__(self, method="all") return result + # error: Signature of "min" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def min( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def min( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def min( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("min", ndim=2)) def min( self, @@ -11395,12 +11495,48 @@ def min( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().min(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().min( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="min") return result + # error: Signature of "max" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def max( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def max( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def max( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("max", ndim=2)) def max( self, @@ -11408,8 +11544,10 @@ def max( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().max(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().max( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="max") return result @@ -11422,8 +11560,14 @@ def sum( numeric_only: bool = False, min_count: int = 0, **kwargs, - ): - result = super().sum(axis, skipna, numeric_only, min_count, **kwargs) + ) -> Series: + result = super().sum( + axis=axis, + skipna=skipna, + numeric_only=numeric_only, + min_count=min_count, + **kwargs, + ) return result.__finalize__(self, method="sum") @doc(make_doc("prod", ndim=2)) @@ -11434,10 +11578,50 @@ def prod( numeric_only: bool = False, min_count: int = 0, **kwargs, - ): - result = super().prod(axis, skipna, numeric_only, min_count, **kwargs) + ) -> Series: + result = super().prod( + axis=axis, + skipna=skipna, + numeric_only=numeric_only, + min_count=min_count, + **kwargs, + ) return result.__finalize__(self, method="prod") + # error: Signature of "mean" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def mean( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def mean( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def mean( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("mean", ndim=2)) def mean( self, @@ -11445,12 +11629,48 @@ def mean( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().mean(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().mean( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="mean") return result + # error: Signature of "median" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def median( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def median( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def median( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("median", ndim=2)) def median( self, @@ -11458,12 +11678,51 @@ def median( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().median(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().median( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="median") return result + # error: Signature of "sem" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def sem( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def sem( + self, + *, + axis: None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def sem( + self, + *, + axis: Axis | None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("sem", ndim=2)) def sem( self, @@ -11472,12 +11731,51 @@ def sem( ddof: int = 1, numeric_only: bool = False, **kwargs, - ): - result = super().sem(axis, skipna, ddof, numeric_only, **kwargs) + ) -> Series | Any: + result = super().sem( + axis=axis, skipna=skipna, ddof=ddof, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="sem") return result + # error: Signature of "var" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def var( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def var( + self, + *, + axis: None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def var( + self, + *, + axis: Axis | None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("var", ndim=2)) def var( self, @@ -11486,12 +11784,51 @@ def var( ddof: int = 1, numeric_only: bool = False, **kwargs, - ): - result = super().var(axis, skipna, ddof, numeric_only, **kwargs) + ) -> Series | Any: + result = super().var( + axis=axis, skipna=skipna, ddof=ddof, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="var") return result + # error: Signature of "std" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def std( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def std( + self, + *, + axis: None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def std( + self, + *, + axis: Axis | None, + skipna: bool = ..., + ddof: int = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("std", ndim=2)) def std( self, @@ -11500,12 +11837,48 @@ def std( ddof: int = 1, numeric_only: bool = False, **kwargs, - ): - result = super().std(axis, skipna, ddof, numeric_only, **kwargs) + ) -> Series | Any: + result = super().std( + axis=axis, skipna=skipna, ddof=ddof, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="std") return result + # error: Signature of "skew" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def skew( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def skew( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def skew( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("skew", ndim=2)) def skew( self, @@ -11513,12 +11886,48 @@ def skew( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().skew(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().skew( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="skew") return result + # error: Signature of "kurt" incompatible with supertype "NDFrame" + @overload # type: ignore[override] + def kurt( + self, + *, + axis: Axis = ..., + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series: + ... + + @overload + def kurt( + self, + *, + axis: None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Any: + ... + + @overload + def kurt( + self, + *, + axis: Axis | None, + skipna: bool = ..., + numeric_only: bool = ..., + **kwargs, + ) -> Series | Any: + ... + @doc(make_doc("kurt", ndim=2)) def kurt( self, @@ -11526,13 +11935,16 @@ def kurt( skipna: bool = True, numeric_only: bool = False, **kwargs, - ): - result = super().kurt(axis, skipna, numeric_only, **kwargs) + ) -> Series | Any: + result = super().kurt( + axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) if isinstance(result, Series): result = result.__finalize__(self, method="kurt") return result - kurtosis = kurt + # error: Incompatible types in assignment + kurtosis = kurt # type: ignore[assignment] product = prod @doc(make_doc("cummin", ndim=2)) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 3c71784ad81c4..f458e058c9755 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -11805,6 +11805,7 @@ def _logical_func( def any( self, + *, axis: Axis | None = 0, bool_only: bool_t = False, skipna: bool_t = True, @@ -11816,6 +11817,7 @@ def any( def all( self, + *, axis: Axis = 0, bool_only: bool_t = False, skipna: bool_t = True, @@ -11919,6 +11921,7 @@ def _stat_function_ddof( def sem( self, + *, axis: Axis | None = 0, skipna: bool_t = True, ddof: int = 1, @@ -11931,6 +11934,7 @@ def sem( def var( self, + *, axis: Axis | None = 0, skipna: bool_t = True, ddof: int = 1, @@ -11943,6 +11947,7 @@ def var( def std( self, + *, axis: Axis | None = 0, skipna: bool_t = True, ddof: int = 1, @@ -11974,6 +11979,7 @@ def _stat_function( def min( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -11990,6 +11996,7 @@ def min( def max( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12006,6 +12013,7 @@ def max( def mean( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12017,6 +12025,7 @@ def mean( def median( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12028,6 +12037,7 @@ def median( def skew( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12039,6 +12049,7 @@ def skew( def kurt( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12091,6 +12102,7 @@ def _min_count_stat_function( def sum( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, @@ -12103,6 +12115,7 @@ def sum( def prod( self, + *, axis: Axis | None = 0, skipna: bool_t = True, numeric_only: bool_t = False, diff --git a/pandas/core/reshape/encoding.py b/pandas/core/reshape/encoding.py index fae5c082c72a0..fef32fca828a9 100644 --- a/pandas/core/reshape/encoding.py +++ b/pandas/core/reshape/encoding.py @@ -6,10 +6,7 @@ Iterable, ) import itertools -from typing import ( - TYPE_CHECKING, - cast, -) +from typing import TYPE_CHECKING import numpy as np @@ -492,7 +489,7 @@ def from_dummies( f"Received 'data' of type: {type(data).__name__}" ) - col_isna_mask = cast(Series, data.isna().any()) + col_isna_mask = data.isna().any() if col_isna_mask.any(): raise ValueError( diff --git a/pandas/core/series.py b/pandas/core/series.py index 641a44efbf286..8093f9aa70cba 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -6435,7 +6435,9 @@ def min( numeric_only: bool = False, **kwargs, ): - return NDFrame.min(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.min( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) @doc(make_doc("max", ndim=1)) def max( @@ -6445,7 +6447,9 @@ def max( numeric_only: bool = False, **kwargs, ): - return NDFrame.max(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.max( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) @doc(make_doc("sum", ndim=1)) def sum( @@ -6456,7 +6460,14 @@ def sum( min_count: int = 0, **kwargs, ): - return NDFrame.sum(self, axis, skipna, numeric_only, min_count, **kwargs) + return NDFrame.sum( + self, + axis=axis, + skipna=skipna, + numeric_only=numeric_only, + min_count=min_count, + **kwargs, + ) @doc(make_doc("prod", ndim=1)) def prod( @@ -6467,7 +6478,14 @@ def prod( min_count: int = 0, **kwargs, ): - return NDFrame.prod(self, axis, skipna, numeric_only, min_count, **kwargs) + return NDFrame.prod( + self, + axis=axis, + skipna=skipna, + numeric_only=numeric_only, + min_count=min_count, + **kwargs, + ) @doc(make_doc("mean", ndim=1)) def mean( @@ -6477,7 +6495,9 @@ def mean( numeric_only: bool = False, **kwargs, ): - return NDFrame.mean(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.mean( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) @doc(make_doc("median", ndim=1)) def median( @@ -6487,7 +6507,9 @@ def median( numeric_only: bool = False, **kwargs, ): - return NDFrame.median(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.median( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) @doc(make_doc("sem", ndim=1)) def sem( @@ -6498,7 +6520,14 @@ def sem( numeric_only: bool = False, **kwargs, ): - return NDFrame.sem(self, axis, skipna, ddof, numeric_only, **kwargs) + return NDFrame.sem( + self, + axis=axis, + skipna=skipna, + ddof=ddof, + numeric_only=numeric_only, + **kwargs, + ) @doc(make_doc("var", ndim=1)) def var( @@ -6509,7 +6538,14 @@ def var( numeric_only: bool = False, **kwargs, ): - return NDFrame.var(self, axis, skipna, ddof, numeric_only, **kwargs) + return NDFrame.var( + self, + axis=axis, + skipna=skipna, + ddof=ddof, + numeric_only=numeric_only, + **kwargs, + ) @doc(make_doc("std", ndim=1)) def std( @@ -6520,7 +6556,14 @@ def std( numeric_only: bool = False, **kwargs, ): - return NDFrame.std(self, axis, skipna, ddof, numeric_only, **kwargs) + return NDFrame.std( + self, + axis=axis, + skipna=skipna, + ddof=ddof, + numeric_only=numeric_only, + **kwargs, + ) @doc(make_doc("skew", ndim=1)) def skew( @@ -6530,7 +6573,9 @@ def skew( numeric_only: bool = False, **kwargs, ): - return NDFrame.skew(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.skew( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) @doc(make_doc("kurt", ndim=1)) def kurt( @@ -6540,7 +6585,9 @@ def kurt( numeric_only: bool = False, **kwargs, ): - return NDFrame.kurt(self, axis, skipna, numeric_only, **kwargs) + return NDFrame.kurt( + self, axis=axis, skipna=skipna, numeric_only=numeric_only, **kwargs + ) kurtosis = kurt product = prod