11
11
final ,
12
12
no_type_check ,
13
13
)
14
+ import warnings
14
15
15
16
import numpy as np
16
17
48
49
Substitution ,
49
50
doc ,
50
51
)
52
+ from pandas .util ._exceptions import find_stack_level
51
53
52
54
from pandas .core .dtypes .generic import (
53
55
ABCDataFrame ,
@@ -893,6 +895,7 @@ def sum(
893
895
* args ,
894
896
** kwargs ,
895
897
):
898
+ maybe_warn_args_and_kwargs (type (self ), "sum" , args , kwargs )
896
899
nv .validate_resampler_func ("sum" , args , kwargs )
897
900
return self ._downsample ("sum" , numeric_only = numeric_only , min_count = min_count )
898
901
@@ -904,6 +907,7 @@ def prod(
904
907
* args ,
905
908
** kwargs ,
906
909
):
910
+ maybe_warn_args_and_kwargs (type (self ), "prod" , args , kwargs )
907
911
nv .validate_resampler_func ("prod" , args , kwargs )
908
912
return self ._downsample ("prod" , numeric_only = numeric_only , min_count = min_count )
909
913
@@ -914,6 +918,7 @@ def min(
914
918
* args ,
915
919
** kwargs ,
916
920
):
921
+ maybe_warn_args_and_kwargs (type (self ), "min" , args , kwargs )
917
922
nv .validate_resampler_func ("min" , args , kwargs )
918
923
return self ._downsample ("min" , numeric_only = numeric_only , min_count = min_count )
919
924
@@ -924,6 +929,7 @@ def max(
924
929
* args ,
925
930
** kwargs ,
926
931
):
932
+ maybe_warn_args_and_kwargs (type (self ), "max" , args , kwargs )
927
933
nv .validate_resampler_func ("max" , args , kwargs )
928
934
return self ._downsample ("max" , numeric_only = numeric_only , min_count = min_count )
929
935
@@ -935,6 +941,7 @@ def first(
935
941
* args ,
936
942
** kwargs ,
937
943
):
944
+ maybe_warn_args_and_kwargs (type (self ), "first" , args , kwargs )
938
945
nv .validate_resampler_func ("first" , args , kwargs )
939
946
return self ._downsample ("first" , numeric_only = numeric_only , min_count = min_count )
940
947
@@ -946,11 +953,13 @@ def last(
946
953
* args ,
947
954
** kwargs ,
948
955
):
956
+ maybe_warn_args_and_kwargs (type (self ), "last" , args , kwargs )
949
957
nv .validate_resampler_func ("last" , args , kwargs )
950
958
return self ._downsample ("last" , numeric_only = numeric_only , min_count = min_count )
951
959
952
960
@doc (GroupBy .median )
953
961
def median (self , numeric_only : bool = False , * args , ** kwargs ):
962
+ maybe_warn_args_and_kwargs (type (self ), "median" , args , kwargs )
954
963
nv .validate_resampler_func ("median" , args , kwargs )
955
964
return self ._downsample ("median" , numeric_only = numeric_only )
956
965
@@ -977,6 +986,7 @@ def mean(
977
986
DataFrame or Series
978
987
Mean of values within each group.
979
988
"""
989
+ maybe_warn_args_and_kwargs (type (self ), "mean" , args , kwargs )
980
990
nv .validate_resampler_func ("mean" , args , kwargs )
981
991
return self ._downsample ("mean" , numeric_only = numeric_only )
982
992
@@ -1008,6 +1018,7 @@ def std(
1008
1018
DataFrame or Series
1009
1019
Standard deviation of values within each group.
1010
1020
"""
1021
+ maybe_warn_args_and_kwargs (type (self ), "std" , args , kwargs )
1011
1022
nv .validate_resampler_func ("std" , args , kwargs )
1012
1023
return self ._downsample ("std" , ddof = ddof , numeric_only = numeric_only )
1013
1024
@@ -1040,6 +1051,7 @@ def var(
1040
1051
DataFrame or Series
1041
1052
Variance of values within each group.
1042
1053
"""
1054
+ maybe_warn_args_and_kwargs (type (self ), "var" , args , kwargs )
1043
1055
nv .validate_resampler_func ("var" , args , kwargs )
1044
1056
return self ._downsample ("var" , ddof = ddof , numeric_only = numeric_only )
1045
1057
@@ -1051,6 +1063,7 @@ def sem(
1051
1063
* args ,
1052
1064
** kwargs ,
1053
1065
):
1066
+ maybe_warn_args_and_kwargs (type (self ), "sem" , args , kwargs )
1054
1067
nv .validate_resampler_func ("sem" , args , kwargs )
1055
1068
return self ._downsample ("sem" , ddof = ddof , numeric_only = numeric_only )
1056
1069
@@ -1060,6 +1073,7 @@ def ohlc(
1060
1073
* args ,
1061
1074
** kwargs ,
1062
1075
):
1076
+ maybe_warn_args_and_kwargs (type (self ), "ohlc" , args , kwargs )
1063
1077
nv .validate_resampler_func ("ohlc" , args , kwargs )
1064
1078
return self ._downsample ("ohlc" )
1065
1079
@@ -1069,6 +1083,7 @@ def nunique(
1069
1083
* args ,
1070
1084
** kwargs ,
1071
1085
):
1086
+ maybe_warn_args_and_kwargs (type (self ), "nunique" , args , kwargs )
1072
1087
nv .validate_resampler_func ("nunique" , args , kwargs )
1073
1088
return self ._downsample ("nunique" )
1074
1089
@@ -2223,3 +2238,37 @@ def _asfreq_compat(index: DatetimeIndex | PeriodIndex | TimedeltaIndex, freq):
2223
2238
else : # pragma: no cover
2224
2239
raise TypeError (type (index ))
2225
2240
return new_index
2241
+
2242
+
2243
+ def maybe_warn_args_and_kwargs (cls , kernel : str , args , kwargs ) -> None :
2244
+ """
2245
+ Warn for deprecation of args and kwargs in resample functions.
2246
+
2247
+ Parameters
2248
+ ----------
2249
+ cls : type
2250
+ Class to warn about.
2251
+ kernel : str
2252
+ Operation name.
2253
+ args : tuple or None
2254
+ args passed by user. Will be None if and only if kernel does not have args.
2255
+ kwargs : dict or None
2256
+ kwargs passed by user. Will be None if and only if kernel does not have kwargs.
2257
+ """
2258
+ warn_args = args is not None and len (args ) > 0
2259
+ warn_kwargs = kwargs is not None and len (kwargs ) > 0
2260
+ if warn_args and warn_kwargs :
2261
+ msg = "args and kwargs"
2262
+ elif warn_args :
2263
+ msg = "args"
2264
+ elif warn_kwargs :
2265
+ msg = "kwargs"
2266
+ else :
2267
+ return
2268
+ warnings .warn (
2269
+ f"Passing additional { msg } to { cls .__name__ } .{ kernel } has "
2270
+ "no impact on the result and is deprecated. This will "
2271
+ "raise a TypeError in a future version of pandas." ,
2272
+ category = FutureWarning ,
2273
+ stacklevel = find_stack_level (),
2274
+ )
0 commit comments