32
32
from pandas .core .series import Series
33
33
from pandas .util import py3compat
34
34
from pandas .util .terminal import get_terminal_size
35
- from pandas .util .decorators import deprecate , Appender
35
+ from pandas .util .decorators import deprecate , Appender , Substitution
36
36
37
37
from pandas .core .format import DataFrameFormatter , docstring_to_string
38
38
162
162
merged : DataFrame
163
163
"""
164
164
165
- def _add_stat_doc (f , name , shortname , na_action = _doc_exclude_na ,
166
- extras = '' ):
167
- doc = _stat_doc % {'name' : name ,
168
- 'shortname' : shortname ,
169
- 'na_action' : na_action ,
170
- 'extras' : extras }
171
- f .__doc__ = doc
172
-
173
165
174
166
#----------------------------------------------------------------------
175
167
# Factory helper methods
176
168
177
169
def _arith_method (func , name , default_axis = 'columns' ):
170
+ @Appender (_arith_doc % name )
178
171
def f (self , other , axis = default_axis , level = None , fill_value = None ):
179
172
if isinstance (other , DataFrame ): # Another DataFrame
180
173
return self ._combine_frame (other , func , fill_value , level )
@@ -184,12 +177,12 @@ def f(self, other, axis=default_axis, level=None, fill_value=None):
184
177
return self ._combine_const (other , func )
185
178
186
179
f .__name__ = name
187
- f .__doc__ = _arith_doc % name
188
180
189
181
return f
190
182
191
183
192
184
def comp_method (func , name ):
185
+ @Appender ('Wrapper for comparison method %s' % name )
193
186
def f (self , other ):
194
187
if isinstance (other , DataFrame ): # Another DataFrame
195
188
return self ._compare_frame (other , func )
@@ -199,7 +192,6 @@ def f(self, other):
199
192
return self ._combine_const (other , func )
200
193
201
194
f .__name__ = name
202
- f .__doc__ = 'Wrapper for comparison method %s' % name
203
195
204
196
return f
205
197
@@ -2844,6 +2836,8 @@ def _join_compat(self, other, on=None, how='left', lsuffix='', rsuffix=''):
2844
2836
return concat ([self ] + list (other ), axis = 1 , join = how ,
2845
2837
join_axes = join_axes , verify_integrity = True )
2846
2838
2839
+ @Substitution ('' )
2840
+ @Appender (_merge_doc , indents = 2 )
2847
2841
def merge (self , right , how = 'inner' , on = None , left_on = None , right_on = None ,
2848
2842
left_index = False , right_index = False , sort = True ,
2849
2843
suffixes = ('.x' , '.y' ), copy = True ):
@@ -2852,7 +2846,6 @@ def merge(self, right, how='inner', on=None, left_on=None, right_on=None,
2852
2846
left_on = left_on , right_on = right_on ,
2853
2847
left_index = left_index , right_index = right_index , sort = sort ,
2854
2848
suffixes = suffixes , copy = copy )
2855
- if __debug__ : merge .__doc__ = _merge_doc % ''
2856
2849
2857
2850
#----------------------------------------------------------------------
2858
2851
# Statistical methods, etc.
@@ -3061,56 +3054,71 @@ def _count_level(self, level, axis=0, numeric_only=False):
3061
3054
else :
3062
3055
return result
3063
3056
3057
+ @Substitution (name = 'sum' , shortname = 'sum' , na_action = _doc_exclude_na ,
3058
+ extras = _numeric_only_doc )
3059
+ @Appender (_stat_doc )
3064
3060
def sum (self , axis = 0 , numeric_only = None , skipna = True , level = None ):
3065
3061
if level is not None :
3066
3062
return self ._agg_by_level ('sum' , axis = axis , level = level ,
3067
3063
skipna = skipna )
3068
3064
return self ._reduce (nanops .nansum , axis = axis , skipna = skipna ,
3069
3065
numeric_only = numeric_only )
3070
- _add_stat_doc (sum , 'sum' , 'sum' , extras = _numeric_only_doc )
3071
3066
3067
+ @Substitution (name = 'mean' , shortname = 'mean' , na_action = _doc_exclude_na ,
3068
+ extras = '' )
3069
+ @Appender (_stat_doc )
3072
3070
def mean (self , axis = 0 , skipna = True , level = None ):
3073
3071
if level is not None :
3074
3072
return self ._agg_by_level ('mean' , axis = axis , level = level ,
3075
3073
skipna = skipna )
3076
3074
return self ._reduce (nanops .nanmean , axis = axis , skipna = skipna ,
3077
3075
numeric_only = None )
3078
- _add_stat_doc (mean , 'mean' , 'mean' )
3079
3076
3077
+ @Substitution (name = 'minimum' , shortname = 'min' , na_action = _doc_exclude_na ,
3078
+ extras = '' )
3079
+ @Appender (_stat_doc )
3080
3080
def min (self , axis = 0 , skipna = True , level = None ):
3081
3081
if level is not None :
3082
3082
return self ._agg_by_level ('min' , axis = axis , level = level ,
3083
3083
skipna = skipna )
3084
3084
return self ._reduce (nanops .nanmin , axis = axis , skipna = skipna ,
3085
3085
numeric_only = None )
3086
- _add_stat_doc (min , 'minimum' , 'min' )
3087
3086
3087
+ @Substitution (name = 'maximum' , shortname = 'max' , na_action = _doc_exclude_na ,
3088
+ extras = '' )
3089
+ @Appender (_stat_doc )
3088
3090
def max (self , axis = 0 , skipna = True , level = None ):
3089
3091
if level is not None :
3090
3092
return self ._agg_by_level ('max' , axis = axis , level = level ,
3091
3093
skipna = skipna )
3092
3094
return self ._reduce (nanops .nanmax , axis = axis , skipna = skipna ,
3093
3095
numeric_only = None )
3094
- _add_stat_doc (max , 'maximum' , 'max' )
3095
3096
3097
+ @Substitution (name = 'product' , shortname = 'product' ,
3098
+ na_action = 'NA/null values are treated as 1' , extras = '' )
3099
+ @Appender (_stat_doc )
3096
3100
def prod (self , axis = 0 , skipna = True , level = None ):
3097
3101
if level is not None :
3098
3102
return self ._agg_by_level ('prod' , axis = axis , level = level ,
3099
3103
skipna = skipna )
3100
3104
return self ._reduce (nanops .nanprod , axis = axis , skipna = skipna ,
3101
3105
numeric_only = None )
3102
- _add_stat_doc (prod , 'product' , 'product' ,
3103
- na_action = 'NA/null values are treated as 1' )
3106
+
3104
3107
product = prod
3105
3108
3109
+ @Substitution (name = 'median' , shortname = 'median' , na_action = _doc_exclude_na ,
3110
+ extras = '' )
3111
+ @Appender (_stat_doc )
3106
3112
def median (self , axis = 0 , skipna = True , level = None ):
3107
3113
if level is not None :
3108
3114
return self ._agg_by_level ('median' , axis = axis , level = level ,
3109
3115
skipna = skipna )
3110
3116
return self ._reduce (nanops .nanmedian , axis = axis , skipna = skipna ,
3111
3117
numeric_only = None )
3112
- _add_stat_doc (median , 'median' , 'median' )
3113
3118
3119
+ @Substitution (name = 'median absolute deviation' , shortname = 'mad' ,
3120
+ na_action = _doc_exclude_na , extras = '' )
3121
+ @Appender (_stat_doc )
3114
3122
def mad (self , axis = 0 , skipna = True , level = None ):
3115
3123
if level is not None :
3116
3124
return self ._agg_by_level ('mad' , axis = axis , level = level ,
@@ -3123,30 +3131,35 @@ def mad(self, axis=0, skipna=True, level=None):
3123
3131
else :
3124
3132
demeaned = frame .sub (frame .mean (axis = 1 ), axis = 0 )
3125
3133
return np .abs (demeaned ).mean (axis = axis , skipna = skipna )
3126
- _add_stat_doc (mad , 'mean absolute deviation' , 'mad' )
3127
3134
3135
+ @Substitution (name = 'unbiased variance' , shortname = 'var' ,
3136
+ na_action = _doc_exclude_na , extras = '' )
3137
+ @Appender (_stat_doc )
3128
3138
def var (self , axis = 0 , skipna = True , level = None ):
3129
3139
if level is not None :
3130
3140
return self ._agg_by_level ('var' , axis = axis , level = level ,
3131
3141
skipna = skipna )
3132
3142
return self ._reduce (nanops .nanvar , axis = axis , skipna = skipna ,
3133
3143
numeric_only = None )
3134
- _add_stat_doc (var , 'unbiased variance' , 'var' )
3135
3144
3145
+ @Substitution (name = 'unbiased standard deviation' , shortname = 'std' ,
3146
+ na_action = _doc_exclude_na , extras = '' )
3147
+ @Appender (_stat_doc )
3136
3148
def std (self , axis = 0 , skipna = True , level = None ):
3137
3149
if level is not None :
3138
3150
return self ._agg_by_level ('std' , axis = axis , level = level ,
3139
3151
skipna = skipna )
3140
3152
return np .sqrt (self .var (axis = axis , skipna = skipna ))
3141
- _add_stat_doc (std , 'unbiased standard deviation' , 'std' )
3142
3153
3154
+ @Substitution (name = 'unbiased skewness' , shortname = 'skew' ,
3155
+ na_action = _doc_exclude_na , extras = '' )
3156
+ @Appender (_stat_doc )
3143
3157
def skew (self , axis = 0 , skipna = True , level = None ):
3144
3158
if level is not None :
3145
3159
return self ._agg_by_level ('skew' , axis = axis , level = level ,
3146
3160
skipna = skipna )
3147
3161
return self ._reduce (nanops .nanskew , axis = axis , skipna = skipna ,
3148
3162
numeric_only = None )
3149
- _add_stat_doc (skew , 'unbiased skewness' , 'skew' )
3150
3163
3151
3164
def _agg_by_level (self , name , axis = 0 , level = 0 , skipna = True ):
3152
3165
grouped = self .groupby (level = level , axis = axis )
0 commit comments