Skip to content

Commit b31610d

Browse files
committed
BUG: hack in normalize in MonthEnd, BMonthEnd, close #1451
1 parent 2e0b9b1 commit b31610d

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

pandas/tseries/offsets.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,8 @@ class MonthEnd(DateOffset, CacheableOffset):
306306
"""DateOffset of one month end"""
307307

308308
def apply(self, other):
309+
other = datetime(other.year, other.month, other.day)
310+
309311
n = self.n
310312
_, days_in_month = lib.monthrange(other.year, other.month)
311313
if other.day != days_in_month:
@@ -317,7 +319,7 @@ def apply(self, other):
317319

318320
@classmethod
319321
def onOffset(cls, dt):
320-
__junk, days_in_month = lib.monthrange(dt.year, dt.month)
322+
days_in_month = lib.monthrange(dt.year, dt.month)[1]
321323
return dt.day == days_in_month
322324

323325
@property
@@ -354,6 +356,8 @@ def isAnchored(self):
354356
return (self.n == 1)
355357

356358
def apply(self, other):
359+
other = datetime(other.year, other.month, other.day)
360+
357361
n = self.n
358362

359363
wkday, days_in_month = lib.monthrange(other.year, other.month)

pandas/tseries/tests/test_offsets.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,13 @@ def test_offset(self):
474474
for base, expected in cases.iteritems():
475475
assertEq(offset, base, expected)
476476

477+
def test_normalize(self):
478+
dt = datetime(2007, 1, 1, 3)
479+
480+
result = dt + BMonthEnd()
481+
expected = dt.replace(hour=0) + BMonthEnd()
482+
self.assertEqual(result, expected)
483+
477484
def test_onOffset(self):
478485

479486
tests = [(BMonthEnd(), datetime(2007, 12, 31), True),
@@ -567,6 +574,13 @@ def test_offset(self):
567574
for base, expected in cases.iteritems():
568575
assertEq(offset, base, expected)
569576

577+
def test_normalize(self):
578+
dt = datetime(2007, 1, 1, 3)
579+
580+
result = dt + MonthEnd()
581+
expected = dt.replace(hour=0) + MonthEnd()
582+
self.assertEqual(result, expected)
583+
570584
def test_onOffset(self):
571585

572586
tests = [(MonthEnd(), datetime(2007, 12, 31), True),

pandas/tseries/tests/test_timeseries.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -914,8 +914,6 @@ def test_set_dataframe_column_ns_dtype(self):
914914
self.assert_(x[0].dtype == np.dtype('M8[ns]'))
915915

916916
def test_groupby_count_dateparseerror(self):
917-
from pandas import *
918-
919917
dr = date_range(start='1/1/2012', freq='5min', periods=10)
920918

921919
# BAD Example, datetimes first
@@ -929,6 +927,13 @@ def test_groupby_count_dateparseerror(self):
929927

930928
assert_series_equal(result, expected)
931929

930+
def test_monthly_resample_error(self):
931+
# #1451
932+
dates = date_range('4/16/2012 20:00', periods=5000, freq='h')
933+
ts = Series(randn(len(dates)), index=dates)
934+
# it works!
935+
result = ts.resample('M')
936+
932937
def _simple_ts(start, end, freq='D'):
933938
rng = date_range(start, end, freq=freq)
934939
return Series(np.random.randn(len(rng)), index=rng)

0 commit comments

Comments
 (0)