Skip to content

Commit 2ef795e

Browse files
committed
Merge branch 'cummin-NaT' of https://github.com/unutbu/pandas into unutbu-cummin-NaT
Conflicts: doc/source/whatsnew/v0.15.2.txt
2 parents fe8509b + 010741f commit 2ef795e

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

doc/source/whatsnew/v0.15.2.txt

+3
Original file line numberDiff line numberDiff line change
@@ -172,5 +172,8 @@ Bug Fixes
172172

173173

174174

175+
175176
- Bug in `StataWriter` the produces writes strings with 244 characters irrespective of actual size (:issue:`8969`)
176177

178+
179+
- Fixed ValueError raised by cummin/cummax when datetime64 Series contains NaT. (:issue:`8965`)

pandas/core/generic.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -4114,13 +4114,17 @@ def func(self, axis=None, dtype=None, out=None, skipna=True,
41144114
axis = self._get_axis_number(axis)
41154115

41164116
y = _values_from_object(self).copy()
4117-
if not issubclass(y.dtype.type, (np.integer, np.bool_)):
4117+
4118+
if skipna and issubclass(y.dtype.type,
4119+
(np.datetime64, np.timedelta64)):
4120+
result = accum_func(y, axis)
4121+
mask = isnull(self)
4122+
np.putmask(result, mask, pd.tslib.iNaT)
4123+
elif skipna and not issubclass(y.dtype.type, (np.integer, np.bool_)):
41184124
mask = isnull(self)
4119-
if skipna:
4120-
np.putmask(y, mask, mask_a)
4125+
np.putmask(y, mask, mask_a)
41214126
result = accum_func(y, axis)
4122-
if skipna:
4123-
np.putmask(result, mask, mask_b)
4127+
np.putmask(result, mask, mask_b)
41244128
else:
41254129
result = accum_func(y, axis)
41264130

pandas/tests/test_series.py

+56
Original file line numberDiff line numberDiff line change
@@ -2309,6 +2309,62 @@ def test_cummax(self):
23092309

23102310
self.assert_numpy_array_equal(result, expected)
23112311

2312+
def test_cummin_datetime64(self):
2313+
s = pd.Series(pd.to_datetime(
2314+
['NaT', '2000-1-2', 'NaT', '2000-1-1', 'NaT', '2000-1-3']))
2315+
2316+
expected = pd.Series(pd.to_datetime(
2317+
['NaT', '2000-1-2', 'NaT', '2000-1-1', 'NaT', '2000-1-1']))
2318+
result = s.cummin(skipna=True)
2319+
self.assert_series_equal(expected, result)
2320+
2321+
expected = pd.Series(pd.to_datetime(
2322+
['NaT', '2000-1-2', '2000-1-2', '2000-1-1', '2000-1-1', '2000-1-1']))
2323+
result = s.cummin(skipna=False)
2324+
self.assert_series_equal(expected, result)
2325+
2326+
def test_cummax_datetime64(self):
2327+
s = pd.Series(pd.to_datetime(
2328+
['NaT', '2000-1-2', 'NaT', '2000-1-1', 'NaT', '2000-1-3']))
2329+
2330+
expected = pd.Series(pd.to_datetime(
2331+
['NaT', '2000-1-2', 'NaT', '2000-1-2', 'NaT', '2000-1-3']))
2332+
result = s.cummax(skipna=True)
2333+
self.assert_series_equal(expected, result)
2334+
2335+
expected = pd.Series(pd.to_datetime(
2336+
['NaT', '2000-1-2', '2000-1-2', '2000-1-2', '2000-1-2', '2000-1-3']))
2337+
result = s.cummax(skipna=False)
2338+
self.assert_series_equal(expected, result)
2339+
2340+
def test_cummin_timedelta64(self):
2341+
s = pd.Series(pd.to_timedelta(
2342+
['NaT', '2 min', 'NaT', '1 min', 'NaT', '3 min', ]))
2343+
2344+
expected = pd.Series(pd.to_timedelta(
2345+
['NaT', '2 min', 'NaT', '1 min', 'NaT', '1 min', ]))
2346+
result = s.cummin(skipna=True)
2347+
self.assert_series_equal(expected, result)
2348+
2349+
expected = pd.Series(pd.to_timedelta(
2350+
['NaT', '2 min', '2 min', '1 min', '1 min', '1 min', ]))
2351+
result = s.cummin(skipna=False)
2352+
self.assert_series_equal(expected, result)
2353+
2354+
def test_cummax_timedelta64(self):
2355+
s = pd.Series(pd.to_timedelta(
2356+
['NaT', '2 min', 'NaT', '1 min', 'NaT', '3 min', ]))
2357+
2358+
expected = pd.Series(pd.to_timedelta(
2359+
['NaT', '2 min', 'NaT', '2 min', 'NaT', '3 min', ]))
2360+
result = s.cummax(skipna=True)
2361+
self.assert_series_equal(expected, result)
2362+
2363+
expected = pd.Series(pd.to_timedelta(
2364+
['NaT', '2 min', '2 min', '2 min', '2 min', '3 min', ]))
2365+
result = s.cummax(skipna=False)
2366+
self.assert_series_equal(expected, result)
2367+
23122368
def test_npdiff(self):
23132369
raise nose.SkipTest("skipping due to Series no longer being an "
23142370
"ndarray")

0 commit comments

Comments
 (0)