diff --git a/pandas/core/nanops.py b/pandas/core/nanops.py index aa6140383a27a..b38bc9142f7f5 100644 --- a/pandas/core/nanops.py +++ b/pandas/core/nanops.py @@ -230,7 +230,9 @@ def _wrap_results(result, dtype): from pandas import Series # coerce float to results - if is_float(result): + if isnull(result): + result = tslib.NaT + elif is_float(result): result = int(result) result = Series([result], dtype='timedelta64[ns]') else: diff --git a/pandas/tests/test_nanops.py b/pandas/tests/test_nanops.py index 3e8a5fecbb579..483a07264482c 100644 --- a/pandas/tests/test_nanops.py +++ b/pandas/tests/test_nanops.py @@ -5,6 +5,7 @@ import numpy as np from pandas.core.common import isnull +from pandas.tslib import iNaT import pandas.core.nanops as nanops import pandas.util.testing as tm @@ -30,6 +31,8 @@ def setUp(self): self.arr_shape).astype('m8[ns]') self.arr_nan = np.tile(np.nan, self.arr_shape) + self.arr_datenat = np.tile(iNaT, self.arr_shape).astype('M8[ns]') + self.arr_tdeltanat = np.tile(iNaT, self.arr_shape).astype('m8[ns]') self.arr_float_nan = np.vstack([self.arr_float, self.arr_nan]) self.arr_float1_nan = np.vstack([self.arr_float1, self.arr_nan]) self.arr_nan_float1 = np.vstack([self.arr_nan, self.arr_float1]) @@ -244,13 +247,19 @@ def check_funs(self, testfunc, targfunc, else: self.check_fun(testfunc, targfunc, 'arr_date', **kwargs) objs += [self.arr_date.astype('O')] + if allow_all_nan: + self.check_fun(testfunc, targfunc, 'arr_datenat', + **kwargs) try: targfunc(self.arr_tdelta) except TypeError: pass else: self.check_fun(testfunc, targfunc, 'arr_tdelta', **kwargs) - objs += [self.arr_tdelta.astype('O')] + objs += [self.arr_date.astype('O')] + if allow_all_nan: + self.check_fun(testfunc, targfunc, 'arr_tdeltanat', + **kwargs) if allow_obj: self.arr_obj = np.vstack(objs) @@ -291,18 +300,15 @@ def test_nanall(self): allow_all_nan=False, allow_str=False, allow_date=False) def test_nansum(self): - self.check_funs(nanops.nansum, np.sum, - allow_str=False, allow_date=False) + self.check_funs(nanops.nansum, np.sum, allow_str=False) def test_nanmean(self): - self.check_funs(nanops.nanmean, np.mean, - allow_complex=False, allow_obj=False, - allow_str=False, allow_date=False) + self.check_funs(nanops.nanmean, np.mean, allow_complex=False, + allow_obj=False, allow_str=False) def test_nanmedian(self): - self.check_funs(nanops.nanmedian, np.median, - allow_complex=False, allow_str=False, allow_date=False, - allow_obj='convert') + self.check_funs(nanops.nanmedian, np.median, allow_complex=False, + allow_str=False, allow_obj='convert') def test_nanvar(self): self.check_funs_ddof(nanops.nanvar, np.var, @@ -349,7 +355,6 @@ def test_nanargmin(self): func = partial(self._argminmax_wrap, func=np.argmin) if tm.sys.version_info[0:2] == (2, 6): self.check_funs(nanops.nanargmin, func, - allow_date=False, allow_str=False, allow_obj=False) else: self.check_funs(nanops.nanargmin, func,