From 4730ee65a133b4c6bbc0399d328a0e13720f0fe3 Mon Sep 17 00:00:00 2001 From: Chang She Date: Sat, 24 Mar 2012 14:03:36 -0400 Subject: [PATCH] adding ddof parameter back into std and var --- pandas/core/frame.py | 12 ++++++------ pandas/core/nanops.py | 15 +++++++++------ pandas/core/series.py | 4 ++-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index a9f3eb95878b5..ce1f4e49a3846 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -3585,21 +3585,21 @@ def mad(self, axis=0, skipna=True, level=None): @Substitution(name='unbiased variance', shortname='var', na_action=_doc_exclude_na, extras='') @Appender(_stat_doc) - def var(self, axis=0, skipna=True, level=None): + def var(self, axis=0, skipna=True, level=None, ddof=1): if level is not None: return self._agg_by_level('var', axis=axis, level=level, skipna=skipna) return self._reduce(nanops.nanvar, axis=axis, skipna=skipna, - numeric_only=None) + numeric_only=None, ddof=ddof) @Substitution(name='unbiased standard deviation', shortname='std', na_action=_doc_exclude_na, extras='') @Appender(_stat_doc) - def std(self, axis=0, skipna=True, level=None): + def std(self, axis=0, skipna=True, level=None, ddof=1): if level is not None: return self._agg_by_level('std', axis=axis, level=level, skipna=skipna) - return np.sqrt(self.var(axis=axis, skipna=skipna)) + return np.sqrt(self.var(axis=axis, skipna=skipna, ddof=ddof)) @Substitution(name='unbiased skewness', shortname='skew', na_action=_doc_exclude_na, extras='') @@ -3619,8 +3619,8 @@ def _agg_by_level(self, name, axis=0, level=0, skipna=True): applyf = lambda x: method(x, axis=axis, skipna=skipna) return grouped.aggregate(applyf) - def _reduce(self, op, axis=0, skipna=True, numeric_only=None): - f = lambda x: op(x, axis=axis, skipna=skipna) + def _reduce(self, op, axis=0, skipna=True, numeric_only=None, **kwds): + f = lambda x: op(x, axis=axis, skipna=skipna, **kwds) labels = self._get_agg_axis(axis) if numeric_only is None: try: diff --git a/pandas/core/nanops.py b/pandas/core/nanops.py index 7a7274ca367c0..aa947847b4376 100644 --- a/pandas/core/nanops.py +++ b/pandas/core/nanops.py @@ -17,7 +17,10 @@ def _bottleneck_switch(bn_name, alt, zero_value=None, **kwargs): bn_func = getattr(bn, bn_name) except (AttributeError, NameError): # pragma: no cover bn_func = None - def f(values, axis=None, skipna=True): + def f(values, axis=None, skipna=True, **kwds): + if len(kwargs) > 0: + for k, v in kwargs.iteritems(): + kwds[k] = v try: if zero_value is not None and values.size == 0: if values.ndim == 1: @@ -29,14 +32,14 @@ def f(values, axis=None, skipna=True): return result if _USE_BOTTLENECK and skipna and values.dtype != np.object_: - result = bn_func(values, axis=axis, **kwargs) + result = bn_func(values, axis=axis, **kwds) # prefer to treat inf/-inf as NA if _has_infs(result): - result = alt(values, axis=axis, skipna=skipna, **kwargs) + result = alt(values, axis=axis, skipna=skipna, **kwds) else: - result = alt(values, axis=axis, skipna=skipna, **kwargs) + result = alt(values, axis=axis, skipna=skipna, **kwds) except Exception: - result = alt(values, axis=axis, skipna=skipna, **kwargs) + result = alt(values, axis=axis, skipna=skipna, **kwds) return result @@ -180,7 +183,7 @@ def nanargmin(values, axis=None, skipna=True): nansum = _bottleneck_switch('nansum', _nansum, zero_value=0) nanmean = _bottleneck_switch('nanmean', _nanmean) nanmedian = _bottleneck_switch('nanmedian', _nanmedian) -nanvar = _bottleneck_switch('nanvar', _nanvar, ddof=1) +nanvar = _bottleneck_switch('nanvar', _nanvar) nanmin = _bottleneck_switch('nanmin', _nanmin) nanmax = _bottleneck_switch('nanmax', _nanmax) diff --git a/pandas/core/series.py b/pandas/core/series.py index ccd8de3a780ad..56e7d15e3c732 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -1012,7 +1012,7 @@ def std(self, axis=None, dtype=None, out=None, ddof=1, skipna=True, level=None): if level is not None: return self._agg_by_level('std', level=level, skipna=skipna) - return np.sqrt(nanops.nanvar(self.values, skipna=skipna)) + return np.sqrt(nanops.nanvar(self.values, skipna=skipna, ddof=ddof)) @Substitution(name='unbiased variance', shortname='var', na_action=_doc_exclude_na, extras='') @@ -1021,7 +1021,7 @@ def var(self, axis=None, dtype=None, out=None, ddof=1, skipna=True, level=None): if level is not None: return self._agg_by_level('var', level=level, skipna=skipna) - return nanops.nanvar(self.values, skipna=skipna) + return nanops.nanvar(self.values, skipna=skipna, ddof=ddof) @Substitution(name='unbiased skewness', shortname='skew', na_action=_doc_exclude_na, extras='')