Skip to content

Commit dda3de2

Browse files
committed
BUG: PeriodIndex slicing by datetime fails when either end out-of-bounds #1977
1 parent dfc21a1 commit dda3de2

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

pandas/tseries/period.py

+9
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,15 @@ def slice_locs(self, start=None, end=None):
889889
except KeyError:
890890
pass
891891

892+
if isinstance(start, datetime) and isinstance(end, datetime):
893+
ordinals = self.values
894+
t1 = Period(start, freq=self.freq)
895+
t2 = Period(end, freq=self.freq)
896+
897+
left = ordinals.searchsorted(t1.ordinal, side='left')
898+
right = ordinals.searchsorted(t2.ordinal, side='right')
899+
return left, right
900+
892901
return Int64Index.slice_locs(self, start, end)
893902

894903
def _get_string_slice(self, key):

pandas/tseries/tests/test_period.py

+10
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,16 @@ def test_getitem_partial(self):
11751175
result = ts['2008':'2009']
11761176
self.assertEquals(len(result), 24)
11771177

1178+
def test_getitem_datetime(self):
1179+
rng = period_range(start='2012-01-01', periods=10, freq='W-MON')
1180+
ts = Series(range(len(rng)), index=rng)
1181+
1182+
dt1 = datetime(2011, 10, 2)
1183+
dt4 = datetime(2012, 4, 20)
1184+
1185+
rs = ts[dt1:dt4]
1186+
assert_series_equal(rs, ts)
1187+
11781188
def test_sub(self):
11791189
rng = period_range('2007-01', periods=50)
11801190

0 commit comments

Comments
 (0)