Skip to content

Commit c420953

Browse files
committed
COMPAT: provide numpy compat with 1.7 for numeric methods when calling like: np.prod(obj)
as numpy is now passing extra args to the pandas methods!
1 parent 0bbae3b commit c420953

File tree

6 files changed

+303
-231
lines changed

6 files changed

+303
-231
lines changed

doc/source/release.rst

+3
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ API Changes
267267
``SparsePanel``, etc.), now support the entire set of arithmetic operators
268268
and arithmetic flex methods (add, sub, mul, etc.). ``SparsePanel`` does not
269269
support ``pow`` or ``mod`` with non-scalars. (:issue:`3765`)
270+
- Provide numpy compatibility with 1.7 for a calling convention like ``np.prod(pandas_object)`` as numpy
271+
call with additional keyword args (:issue:`4435`)
272+
270273

271274
Internal Refactoring
272275
~~~~~~~~~~~~~~~~~~~~

pandas/core/frame.py

+39-13
Original file line numberDiff line numberDiff line change
@@ -3869,7 +3869,7 @@ def _count_level(self, level, axis=0, numeric_only=False):
38693869
else:
38703870
return result
38713871

3872-
def any(self, axis=0, bool_only=None, skipna=True, level=None):
3872+
def any(self, axis=None, bool_only=None, skipna=True, level=None, **kwargs):
38733873
"""
38743874
Return whether any element is True over requested axis.
38753875
%(na_action)s
@@ -3891,13 +3891,15 @@ def any(self, axis=0, bool_only=None, skipna=True, level=None):
38913891
-------
38923892
any : Series (or DataFrame if level specified)
38933893
"""
3894+
if axis is None:
3895+
axis = self._stat_axis_number
38943896
if level is not None:
38953897
return self._agg_by_level('any', axis=axis, level=level,
38963898
skipna=skipna)
38973899
return self._reduce(nanops.nanany, axis=axis, skipna=skipna,
38983900
numeric_only=bool_only, filter_type='bool')
38993901

3900-
def all(self, axis=0, bool_only=None, skipna=True, level=None):
3902+
def all(self, axis=None, bool_only=None, skipna=True, level=None, **kwargs):
39013903
"""
39023904
Return whether all elements are True over requested axis.
39033905
%(na_action)s
@@ -3919,6 +3921,8 @@ def all(self, axis=0, bool_only=None, skipna=True, level=None):
39193921
-------
39203922
any : Series (or DataFrame if level specified)
39213923
"""
3924+
if axis is None:
3925+
axis = self._stat_axis_number
39223926
if level is not None:
39233927
return self._agg_by_level('all', axis=axis, level=level,
39243928
skipna=skipna)
@@ -3928,7 +3932,9 @@ def all(self, axis=0, bool_only=None, skipna=True, level=None):
39283932
@Substitution(name='sum', shortname='sum', na_action=_doc_exclude_na,
39293933
extras=_numeric_only_doc)
39303934
@Appender(_stat_doc)
3931-
def sum(self, axis=0, numeric_only=None, skipna=True, level=None):
3935+
def sum(self, axis=None, numeric_only=None, skipna=True, level=None, **kwargs):
3936+
if axis is None:
3937+
axis = self._stat_axis_number
39323938
if level is not None:
39333939
return self._agg_by_level('sum', axis=axis, level=level,
39343940
skipna=skipna)
@@ -3938,7 +3944,9 @@ def sum(self, axis=0, numeric_only=None, skipna=True, level=None):
39383944
@Substitution(name='mean', shortname='mean', na_action=_doc_exclude_na,
39393945
extras='')
39403946
@Appender(_stat_doc)
3941-
def mean(self, axis=0, skipna=True, level=None):
3947+
def mean(self, axis=None, skipna=True, level=None, **kwargs):
3948+
if axis is None:
3949+
axis = self._stat_axis_number
39423950
if level is not None:
39433951
return self._agg_by_level('mean', axis=axis, level=level,
39443952
skipna=skipna)
@@ -3948,7 +3956,7 @@ def mean(self, axis=0, skipna=True, level=None):
39483956
@Substitution(name='minimum', shortname='min', na_action=_doc_exclude_na,
39493957
extras='')
39503958
@Appender(_stat_doc)
3951-
def min(self, axis=0, skipna=True, level=None):
3959+
def min(self, axis=None, skipna=True, level=None, **kwargs):
39523960
"""
39533961
Notes
39543962
-----
@@ -3961,6 +3969,8 @@ def min(self, axis=0, skipna=True, level=None):
39613969
DataFrame.idxmin
39623970
Series.idxmin
39633971
"""
3972+
if axis is None:
3973+
axis = self._stat_axis_number
39643974
if level is not None:
39653975
return self._agg_by_level('min', axis=axis, level=level,
39663976
skipna=skipna)
@@ -3970,7 +3980,7 @@ def min(self, axis=0, skipna=True, level=None):
39703980
@Substitution(name='maximum', shortname='max', na_action=_doc_exclude_na,
39713981
extras='')
39723982
@Appender(_stat_doc)
3973-
def max(self, axis=0, skipna=True, level=None):
3983+
def max(self, axis=None, skipna=True, level=None, **kwargs):
39743984
"""
39753985
Notes
39763986
-----
@@ -3983,6 +3993,8 @@ def max(self, axis=0, skipna=True, level=None):
39833993
DataFrame.idxmax
39843994
Series.idxmax
39853995
"""
3996+
if axis is None:
3997+
axis = self._stat_axis_number
39863998
if level is not None:
39873999
return self._agg_by_level('max', axis=axis, level=level,
39884000
skipna=skipna)
@@ -3992,7 +4004,9 @@ def max(self, axis=0, skipna=True, level=None):
39924004
@Substitution(name='product', shortname='product',
39934005
na_action='NA/null values are treated as 1', extras='')
39944006
@Appender(_stat_doc)
3995-
def prod(self, axis=0, skipna=True, level=None):
4007+
def prod(self, axis=None, skipna=True, level=None, **kwargs):
4008+
if axis is None:
4009+
axis = self._stat_axis_number
39964010
if level is not None:
39974011
return self._agg_by_level('prod', axis=axis, level=level,
39984012
skipna=skipna)
@@ -4004,7 +4018,9 @@ def prod(self, axis=0, skipna=True, level=None):
40044018
@Substitution(name='median', shortname='median', na_action=_doc_exclude_na,
40054019
extras='')
40064020
@Appender(_stat_doc)
4007-
def median(self, axis=0, skipna=True, level=None):
4021+
def median(self, axis=None, skipna=True, level=None, **kwargs):
4022+
if axis is None:
4023+
axis = self._stat_axis_number
40084024
if level is not None:
40094025
return self._agg_by_level('median', axis=axis, level=level,
40104026
skipna=skipna)
@@ -4014,7 +4030,9 @@ def median(self, axis=0, skipna=True, level=None):
40144030
@Substitution(name='mean absolute deviation', shortname='mad',
40154031
na_action=_doc_exclude_na, extras='')
40164032
@Appender(_stat_doc)
4017-
def mad(self, axis=0, skipna=True, level=None):
4033+
def mad(self, axis=None, skipna=True, level=None, **kwargs):
4034+
if axis is None:
4035+
axis = self._stat_axis_number
40184036
if level is not None:
40194037
return self._agg_by_level('mad', axis=axis, level=level,
40204038
skipna=skipna)
@@ -4034,7 +4052,9 @@ def mad(self, axis=0, skipna=True, level=None):
40344052
"""
40354053
Normalized by N-1 (unbiased estimator).
40364054
""")
4037-
def var(self, axis=0, skipna=True, level=None, ddof=1):
4055+
def var(self, axis=None, skipna=True, level=None, ddof=1, **kwargs):
4056+
if axis is None:
4057+
axis = self._stat_axis_number
40384058
if level is not None:
40394059
return self._agg_by_level('var', axis=axis, level=level,
40404060
skipna=skipna, ddof=ddof)
@@ -4047,7 +4067,9 @@ def var(self, axis=0, skipna=True, level=None, ddof=1):
40474067
"""
40484068
Normalized by N-1 (unbiased estimator).
40494069
""")
4050-
def std(self, axis=0, skipna=True, level=None, ddof=1):
4070+
def std(self, axis=None, skipna=True, level=None, ddof=1, **kwargs):
4071+
if axis is None:
4072+
axis = self._stat_axis_number
40514073
if level is not None:
40524074
return self._agg_by_level('std', axis=axis, level=level,
40534075
skipna=skipna, ddof=ddof)
@@ -4056,7 +4078,9 @@ def std(self, axis=0, skipna=True, level=None, ddof=1):
40564078
@Substitution(name='unbiased skewness', shortname='skew',
40574079
na_action=_doc_exclude_na, extras='')
40584080
@Appender(_stat_doc)
4059-
def skew(self, axis=0, skipna=True, level=None):
4081+
def skew(self, axis=None, skipna=True, level=None, **kwargs):
4082+
if axis is None:
4083+
axis = self._stat_axis_number
40604084
if level is not None:
40614085
return self._agg_by_level('skew', axis=axis, level=level,
40624086
skipna=skipna)
@@ -4066,7 +4090,9 @@ def skew(self, axis=0, skipna=True, level=None):
40664090
@Substitution(name='unbiased kurtosis', shortname='kurt',
40674091
na_action=_doc_exclude_na, extras='')
40684092
@Appender(_stat_doc)
4069-
def kurt(self, axis=0, skipna=True, level=None):
4093+
def kurt(self, axis=None, skipna=True, level=None, **kwargs):
4094+
if axis is None:
4095+
axis = self._stat_axis_number
40704096
if level is not None:
40714097
return self._agg_by_level('kurt', axis=axis, level=level,
40724098
skipna=skipna)

0 commit comments

Comments
 (0)