diff --git a/doc/source/whatsnew/v0.16.1.txt b/doc/source/whatsnew/v0.16.1.txt index 493f299b2bf32..e0ee88f6eb10c 100755 --- a/doc/source/whatsnew/v0.16.1.txt +++ b/doc/source/whatsnew/v0.16.1.txt @@ -320,3 +320,4 @@ Bug Fixes - Google BigQuery connector now imports dependencies on a per-method basis.(:issue:`9713`) - Updated BigQuery connector to no longer use deprecated ``oauth2client.tools.run()`` (:issue:`8327`) - Bug in subclassed ``DataFrame``. It may not return the correct class, when slicing or subsetting it. (:issue:`9632`) +- BUG in median() where non-float null values are not handled correctly (:issue:`10040`) diff --git a/pandas/core/nanops.py b/pandas/core/nanops.py index f68f4f9037d97..4121dd8e89bee 100644 --- a/pandas/core/nanops.py +++ b/pandas/core/nanops.py @@ -285,6 +285,7 @@ def get_median(x): if values.dtype != np.float64: values = values.astype('f8') + values[mask] = np.nan if axis is None: values = values.ravel() diff --git a/pandas/tseries/tests/test_timedeltas.py b/pandas/tseries/tests/test_timedeltas.py index faf4e3fa57780..45145eb7ab7e8 100644 --- a/pandas/tseries/tests/test_timedeltas.py +++ b/pandas/tseries/tests/test_timedeltas.py @@ -614,7 +614,7 @@ def test_timedelta_ops(self): self.assertEqual(result, expected) result = td.median() - expected = to_timedelta('00:00:08') + expected = to_timedelta('00:00:09') self.assertEqual(result, expected) result = td.to_frame().median() @@ -641,6 +641,14 @@ def test_timedelta_ops(self): for op in ['skew','kurt','sem','var','prod']: self.assertRaises(TypeError, lambda : getattr(td,op)()) + # GH 10040 + # make sure NaT is properly handled by median() + s = Series([Timestamp('2015-02-03'), Timestamp('2015-02-07')]) + self.assertEqual(s.diff().median(), timedelta(days=4)) + + s = Series([Timestamp('2015-02-03'), Timestamp('2015-02-07'), Timestamp('2015-02-15')]) + self.assertEqual(s.diff().median(), timedelta(days=6)) + def test_timedelta_ops_scalar(self): # GH 6808 base = pd.to_datetime('20130101 09:01:12.123456')