Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 441d6e8

Browse files
committedMay 12, 2012
BUG: fix improper quarter parsing for frequencies other than Q-DEC, close #1228
1 parent a98035c commit 441d6e8

File tree

3 files changed

+162
-147
lines changed

3 files changed

+162
-147
lines changed
 

‎pandas/tseries/frequencies.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,8 @@ def is_superperiod(source, target):
951951
return target not in ['D', 'B', 'H', 'T', 'S']
952952

953953
def _get_rule_month(source, default='DEC'):
954+
if isinstance(source, offsets.DateOffset):
955+
source = source.rule_code
954956
source = source.upper()
955957
if '-' not in source:
956958
return default

‎pandas/tseries/tests/test_period.py

Lines changed: 147 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def test_period_cons_quarterly(self):
3636
for month in MONTHS:
3737
freq = 'Q-%s' % month
3838
exp = Period('1989Q3', freq=freq)
39+
self.assert_('1989Q3' in str(exp))
3940
stamp = exp.to_timestamp('D', how='end')
4041
p = Period(stamp, freq=freq)
4142
self.assertEquals(p, exp)
@@ -1058,29 +1059,29 @@ def test_index_duplicate_periods(self):
10581059
assert_series_equal(result, expected)
10591060

10601061
def test_constructor(self):
1061-
ii = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1062-
assert_equal(len(ii), 9)
1062+
pi = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1063+
assert_equal(len(pi), 9)
10631064

1064-
ii = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2009')
1065-
assert_equal(len(ii), 4 * 9)
1065+
pi = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2009')
1066+
assert_equal(len(pi), 4 * 9)
10661067

1067-
ii = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1068-
assert_equal(len(ii), 12 * 9)
1068+
pi = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1069+
assert_equal(len(pi), 12 * 9)
10691070

1070-
ii = PeriodIndex(freq='D', start='1/1/2001', end='12/31/2009')
1071-
assert_equal(len(ii), 365 * 9 + 2)
1071+
pi = PeriodIndex(freq='D', start='1/1/2001', end='12/31/2009')
1072+
assert_equal(len(pi), 365 * 9 + 2)
10721073

1073-
ii = PeriodIndex(freq='B', start='1/1/2001', end='12/31/2009')
1074-
assert_equal(len(ii), 261 * 9)
1074+
pi = PeriodIndex(freq='B', start='1/1/2001', end='12/31/2009')
1075+
assert_equal(len(pi), 261 * 9)
10751076

1076-
ii = PeriodIndex(freq='H', start='1/1/2001', end='12/31/2001 23:00')
1077-
assert_equal(len(ii), 365 * 24)
1077+
pi = PeriodIndex(freq='H', start='1/1/2001', end='12/31/2001 23:00')
1078+
assert_equal(len(pi), 365 * 24)
10781079

1079-
ii = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 23:59')
1080-
assert_equal(len(ii), 24 * 60)
1080+
pi = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 23:59')
1081+
assert_equal(len(pi), 24 * 60)
10811082

1082-
ii = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 23:59:59')
1083-
assert_equal(len(ii), 24 * 60 * 60)
1083+
pi = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 23:59:59')
1084+
assert_equal(len(pi), 24 * 60 * 60)
10841085

10851086
start = Period('02-Apr-2005', 'B')
10861087
i1 = PeriodIndex(start=start, periods=20)
@@ -1137,96 +1138,96 @@ def test_constructor(self):
11371138
self.assertRaises(ValueError, PeriodIndex, vals)
11381139

11391140
def test_shift(self):
1140-
ii1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1141-
ii2 = PeriodIndex(freq='A', start='1/1/2002', end='12/1/2010')
1142-
assert_equal(len(ii1), len(ii2))
1143-
assert_equal(ii1.shift(1).values, ii2.values)
1144-
1145-
ii1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1146-
ii2 = PeriodIndex(freq='A', start='1/1/2000', end='12/1/2008')
1147-
assert_equal(len(ii1), len(ii2))
1148-
assert_equal(ii1.shift(-1).values, ii2.values)
1149-
1150-
ii1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1151-
ii2 = PeriodIndex(freq='M', start='2/1/2001', end='1/1/2010')
1152-
assert_equal(len(ii1), len(ii2))
1153-
assert_equal(ii1.shift(1).values, ii2.values)
1154-
1155-
ii1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1156-
ii2 = PeriodIndex(freq='M', start='12/1/2000', end='11/1/2009')
1157-
assert_equal(len(ii1), len(ii2))
1158-
assert_equal(ii1.shift(-1).values, ii2.values)
1159-
1160-
ii1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
1161-
ii2 = PeriodIndex(freq='D', start='1/2/2001', end='12/2/2009')
1162-
assert_equal(len(ii1), len(ii2))
1163-
assert_equal(ii1.shift(1).values, ii2.values)
1164-
1165-
ii1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
1166-
ii2 = PeriodIndex(freq='D', start='12/31/2000', end='11/30/2009')
1167-
assert_equal(len(ii1), len(ii2))
1168-
assert_equal(ii1.shift(-1).values, ii2.values)
1141+
pi1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1142+
pi2 = PeriodIndex(freq='A', start='1/1/2002', end='12/1/2010')
1143+
assert_equal(len(pi1), len(pi2))
1144+
assert_equal(pi1.shift(1).values, pi2.values)
1145+
1146+
pi1 = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1147+
pi2 = PeriodIndex(freq='A', start='1/1/2000', end='12/1/2008')
1148+
assert_equal(len(pi1), len(pi2))
1149+
assert_equal(pi1.shift(-1).values, pi2.values)
1150+
1151+
pi1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1152+
pi2 = PeriodIndex(freq='M', start='2/1/2001', end='1/1/2010')
1153+
assert_equal(len(pi1), len(pi2))
1154+
assert_equal(pi1.shift(1).values, pi2.values)
1155+
1156+
pi1 = PeriodIndex(freq='M', start='1/1/2001', end='12/1/2009')
1157+
pi2 = PeriodIndex(freq='M', start='12/1/2000', end='11/1/2009')
1158+
assert_equal(len(pi1), len(pi2))
1159+
assert_equal(pi1.shift(-1).values, pi2.values)
1160+
1161+
pi1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
1162+
pi2 = PeriodIndex(freq='D', start='1/2/2001', end='12/2/2009')
1163+
assert_equal(len(pi1), len(pi2))
1164+
assert_equal(pi1.shift(1).values, pi2.values)
1165+
1166+
pi1 = PeriodIndex(freq='D', start='1/1/2001', end='12/1/2009')
1167+
pi2 = PeriodIndex(freq='D', start='12/31/2000', end='11/30/2009')
1168+
assert_equal(len(pi1), len(pi2))
1169+
assert_equal(pi1.shift(-1).values, pi2.values)
11691170

11701171
def test_asfreq(self):
1171-
ii1 = PeriodIndex(freq='A', start='1/1/2001', end='1/1/2001')
1172-
ii2 = PeriodIndex(freq='Q', start='1/1/2001', end='1/1/2001')
1173-
ii3 = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2001')
1174-
ii4 = PeriodIndex(freq='D', start='1/1/2001', end='1/1/2001')
1175-
ii5 = PeriodIndex(freq='H', start='1/1/2001', end='1/1/2001 00:00')
1176-
ii6 = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 00:00')
1177-
ii7 = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 00:00:00')
1178-
1179-
self.assertEquals(ii1.asfreq('Q', 'S'), ii2)
1180-
self.assertEquals(ii1.asfreq('Q', 's'), ii2)
1181-
self.assertEquals(ii1.asfreq('M', 'start'), ii3)
1182-
self.assertEquals(ii1.asfreq('D', 'StarT'), ii4)
1183-
self.assertEquals(ii1.asfreq('H', 'beGIN'), ii5)
1184-
self.assertEquals(ii1.asfreq('Min', 'S'), ii6)
1185-
self.assertEquals(ii1.asfreq('S', 'S'), ii7)
1186-
1187-
self.assertEquals(ii2.asfreq('A', 'S'), ii1)
1188-
self.assertEquals(ii2.asfreq('M', 'S'), ii3)
1189-
self.assertEquals(ii2.asfreq('D', 'S'), ii4)
1190-
self.assertEquals(ii2.asfreq('H', 'S'), ii5)
1191-
self.assertEquals(ii2.asfreq('Min', 'S'), ii6)
1192-
self.assertEquals(ii2.asfreq('S', 'S'), ii7)
1193-
1194-
self.assertEquals(ii3.asfreq('A', 'S'), ii1)
1195-
self.assertEquals(ii3.asfreq('Q', 'S'), ii2)
1196-
self.assertEquals(ii3.asfreq('D', 'S'), ii4)
1197-
self.assertEquals(ii3.asfreq('H', 'S'), ii5)
1198-
self.assertEquals(ii3.asfreq('Min', 'S'), ii6)
1199-
self.assertEquals(ii3.asfreq('S', 'S'), ii7)
1200-
1201-
self.assertEquals(ii4.asfreq('A', 'S'), ii1)
1202-
self.assertEquals(ii4.asfreq('Q', 'S'), ii2)
1203-
self.assertEquals(ii4.asfreq('M', 'S'), ii3)
1204-
self.assertEquals(ii4.asfreq('H', 'S'), ii5)
1205-
self.assertEquals(ii4.asfreq('Min', 'S'), ii6)
1206-
self.assertEquals(ii4.asfreq('S', 'S'), ii7)
1207-
1208-
self.assertEquals(ii5.asfreq('A', 'S'), ii1)
1209-
self.assertEquals(ii5.asfreq('Q', 'S'), ii2)
1210-
self.assertEquals(ii5.asfreq('M', 'S'), ii3)
1211-
self.assertEquals(ii5.asfreq('D', 'S'), ii4)
1212-
self.assertEquals(ii5.asfreq('Min', 'S'), ii6)
1213-
self.assertEquals(ii5.asfreq('S', 'S'), ii7)
1214-
1215-
self.assertEquals(ii6.asfreq('A', 'S'), ii1)
1216-
self.assertEquals(ii6.asfreq('Q', 'S'), ii2)
1217-
self.assertEquals(ii6.asfreq('M', 'S'), ii3)
1218-
self.assertEquals(ii6.asfreq('D', 'S'), ii4)
1219-
self.assertEquals(ii6.asfreq('H', 'S'), ii5)
1220-
self.assertEquals(ii6.asfreq('S', 'S'), ii7)
1221-
1222-
self.assertEquals(ii7.asfreq('A', 'S'), ii1)
1223-
self.assertEquals(ii7.asfreq('Q', 'S'), ii2)
1224-
self.assertEquals(ii7.asfreq('M', 'S'), ii3)
1225-
self.assertEquals(ii7.asfreq('D', 'S'), ii4)
1226-
self.assertEquals(ii7.asfreq('H', 'S'), ii5)
1227-
self.assertEquals(ii7.asfreq('Min', 'S'), ii6)
1228-
1229-
#self.assertEquals(ii7.asfreq('A', 'E'), i_end)
1172+
pi1 = PeriodIndex(freq='A', start='1/1/2001', end='1/1/2001')
1173+
pi2 = PeriodIndex(freq='Q', start='1/1/2001', end='1/1/2001')
1174+
pi3 = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2001')
1175+
pi4 = PeriodIndex(freq='D', start='1/1/2001', end='1/1/2001')
1176+
pi5 = PeriodIndex(freq='H', start='1/1/2001', end='1/1/2001 00:00')
1177+
pi6 = PeriodIndex(freq='Min', start='1/1/2001', end='1/1/2001 00:00')
1178+
pi7 = PeriodIndex(freq='S', start='1/1/2001', end='1/1/2001 00:00:00')
1179+
1180+
self.assertEquals(pi1.asfreq('Q', 'S'), pi2)
1181+
self.assertEquals(pi1.asfreq('Q', 's'), pi2)
1182+
self.assertEquals(pi1.asfreq('M', 'start'), pi3)
1183+
self.assertEquals(pi1.asfreq('D', 'StarT'), pi4)
1184+
self.assertEquals(pi1.asfreq('H', 'beGIN'), pi5)
1185+
self.assertEquals(pi1.asfreq('Min', 'S'), pi6)
1186+
self.assertEquals(pi1.asfreq('S', 'S'), pi7)
1187+
1188+
self.assertEquals(pi2.asfreq('A', 'S'), pi1)
1189+
self.assertEquals(pi2.asfreq('M', 'S'), pi3)
1190+
self.assertEquals(pi2.asfreq('D', 'S'), pi4)
1191+
self.assertEquals(pi2.asfreq('H', 'S'), pi5)
1192+
self.assertEquals(pi2.asfreq('Min', 'S'), pi6)
1193+
self.assertEquals(pi2.asfreq('S', 'S'), pi7)
1194+
1195+
self.assertEquals(pi3.asfreq('A', 'S'), pi1)
1196+
self.assertEquals(pi3.asfreq('Q', 'S'), pi2)
1197+
self.assertEquals(pi3.asfreq('D', 'S'), pi4)
1198+
self.assertEquals(pi3.asfreq('H', 'S'), pi5)
1199+
self.assertEquals(pi3.asfreq('Min', 'S'), pi6)
1200+
self.assertEquals(pi3.asfreq('S', 'S'), pi7)
1201+
1202+
self.assertEquals(pi4.asfreq('A', 'S'), pi1)
1203+
self.assertEquals(pi4.asfreq('Q', 'S'), pi2)
1204+
self.assertEquals(pi4.asfreq('M', 'S'), pi3)
1205+
self.assertEquals(pi4.asfreq('H', 'S'), pi5)
1206+
self.assertEquals(pi4.asfreq('Min', 'S'), pi6)
1207+
self.assertEquals(pi4.asfreq('S', 'S'), pi7)
1208+
1209+
self.assertEquals(pi5.asfreq('A', 'S'), pi1)
1210+
self.assertEquals(pi5.asfreq('Q', 'S'), pi2)
1211+
self.assertEquals(pi5.asfreq('M', 'S'), pi3)
1212+
self.assertEquals(pi5.asfreq('D', 'S'), pi4)
1213+
self.assertEquals(pi5.asfreq('Min', 'S'), pi6)
1214+
self.assertEquals(pi5.asfreq('S', 'S'), pi7)
1215+
1216+
self.assertEquals(pi6.asfreq('A', 'S'), pi1)
1217+
self.assertEquals(pi6.asfreq('Q', 'S'), pi2)
1218+
self.assertEquals(pi6.asfreq('M', 'S'), pi3)
1219+
self.assertEquals(pi6.asfreq('D', 'S'), pi4)
1220+
self.assertEquals(pi6.asfreq('H', 'S'), pi5)
1221+
self.assertEquals(pi6.asfreq('S', 'S'), pi7)
1222+
1223+
self.assertEquals(pi7.asfreq('A', 'S'), pi1)
1224+
self.assertEquals(pi7.asfreq('Q', 'S'), pi2)
1225+
self.assertEquals(pi7.asfreq('M', 'S'), pi3)
1226+
self.assertEquals(pi7.asfreq('D', 'S'), pi4)
1227+
self.assertEquals(pi7.asfreq('H', 'S'), pi5)
1228+
self.assertEquals(pi7.asfreq('Min', 'S'), pi6)
1229+
1230+
#self.assertEquals(pi7.asfreq('A', 'E'), i_end)
12301231

12311232
def test_ts_repr(self):
12321233
index = PeriodIndex(freq='A', start='1/1/2001', end='12/31/2010')
@@ -1258,39 +1259,39 @@ def test_badinput(self):
12581259

12591260
def test_dti_to_period(self):
12601261
dti = DatetimeIndex(start='1/1/2005', end='12/1/2005', freq='M')
1261-
ii1 = dti.to_period()
1262-
ii2 = dti.to_period(freq='D')
1262+
pi1 = dti.to_period()
1263+
pi2 = dti.to_period(freq='D')
12631264

1264-
self.assertEquals(ii1[0], Period('Jan 2005', freq='M'))
1265-
self.assertEquals(ii2[0], Period('1/31/2005', freq='D'))
1265+
self.assertEquals(pi1[0], Period('Jan 2005', freq='M'))
1266+
self.assertEquals(pi2[0], Period('1/31/2005', freq='D'))
12661267

1267-
self.assertEquals(ii1[-1], Period('Nov 2005', freq='M'))
1268-
self.assertEquals(ii2[-1], Period('11/30/2005', freq='D'))
1268+
self.assertEquals(pi1[-1], Period('Nov 2005', freq='M'))
1269+
self.assertEquals(pi2[-1], Period('11/30/2005', freq='D'))
12691270

1270-
def test_iindex_slice_index(self):
1271-
ii = PeriodIndex(start='1/1/10', end='12/31/12', freq='M')
1272-
s = Series(np.random.rand(len(ii)), index=ii)
1271+
def test_pindex_slice_index(self):
1272+
pi = PeriodIndex(start='1/1/10', end='12/31/12', freq='M')
1273+
s = Series(np.random.rand(len(pi)), index=pi)
12731274
res = s['2010']
12741275
exp = s[0:12]
12751276
assert_series_equal(res, exp)
12761277
res = s['2011']
12771278
exp = s[12:24]
12781279
assert_series_equal(res, exp)
12791280

1280-
def test_iindex_qaccess(self):
1281-
ii = PeriodIndex(['2Q05', '3Q05', '4Q05', '1Q06', '2Q06'], freq='Q')
1282-
s = Series(np.random.rand(len(ii)), index=ii).cumsum()
1281+
def test_pindex_qaccess(self):
1282+
pi = PeriodIndex(['2Q05', '3Q05', '4Q05', '1Q06', '2Q06'], freq='Q')
1283+
s = Series(np.random.rand(len(pi)), index=pi).cumsum()
12831284
# Todo: fix these accessors!
12841285
self.assert_(s['05Q4'] == s[2])
12851286

12861287
def test_period_dt64_round_trip(self):
12871288
dti = date_range('1/1/2000', '1/7/2002', freq='B')
1288-
ii = dti.to_period()
1289-
self.assert_(ii.to_timestamp().equals(dti))
1289+
pi = dti.to_period()
1290+
self.assert_(pi.to_timestamp().equals(dti))
12901291

12911292
dti = date_range('1/1/2000', '1/7/2002', freq='B')
1292-
ii = dti.to_period(freq='H')
1293-
self.assert_(ii.to_timestamp().equals(dti))
1293+
pi = dti.to_period(freq='H')
1294+
self.assert_(pi.to_timestamp().equals(dti))
12941295

12951296
def test_to_period_quarterly(self):
12961297
# make sure we can make the round trip
@@ -1309,19 +1310,19 @@ def test_no_multiples(self):
13091310
freq='2A')
13101311
self.assertRaises(ValueError, Period, '1989', freq='2A')
13111312

1312-
# def test_iindex_multiples(self):
1313-
# ii = PeriodIndex(start='1/1/10', end='12/31/12', freq='2M')
1314-
# self.assertEquals(ii[0], Period('1/1/10', '2M'))
1315-
# self.assertEquals(ii[1], Period('3/1/10', '2M'))
1313+
# def test_pindex_multiples(self):
1314+
# pi = PeriodIndex(start='1/1/10', end='12/31/12', freq='2M')
1315+
# self.assertEquals(pi[0], Period('1/1/10', '2M'))
1316+
# self.assertEquals(pi[1], Period('3/1/10', '2M'))
13161317

1317-
# self.assertEquals(ii[0].asfreq('6M'), ii[2].asfreq('6M'))
1318-
# self.assertEquals(ii[0].asfreq('A'), ii[2].asfreq('A'))
1318+
# self.assertEquals(pi[0].asfreq('6M'), pi[2].asfreq('6M'))
1319+
# self.assertEquals(pi[0].asfreq('A'), pi[2].asfreq('A'))
13191320

1320-
# self.assertEquals(ii[0].asfreq('M', how='S'),
1321+
# self.assertEquals(pi[0].asfreq('M', how='S'),
13211322
# Period('Jan 2010', '1M'))
1322-
# self.assertEquals(ii[0].asfreq('M', how='E'),
1323+
# self.assertEquals(pi[0].asfreq('M', how='E'),
13231324
# Period('Feb 2010', '1M'))
1324-
# self.assertEquals(ii[1].asfreq('M', how='S'),
1325+
# self.assertEquals(pi[1].asfreq('M', how='S'),
13251326
# Period('Mar 2010', '1M'))
13261327

13271328
# i = Period('1/1/2010 12:05:18', '5S')
@@ -1424,33 +1425,33 @@ def test_fields(self):
14241425
# year, month, day, hour, minute
14251426
# second, weekofyear, week, dayofweek, weekday, dayofyear, quarter
14261427
# qyear
1427-
ii = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1428-
self._check_all_fields(ii)
1428+
pi = PeriodIndex(freq='A', start='1/1/2001', end='12/1/2009')
1429+
self._check_all_fields(pi)
14291430

1430-
ii = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2003')
1431-
self._check_all_fields(ii)
1431+
pi = PeriodIndex(freq='Q', start='1/1/2001', end='12/1/2003')
1432+
self._check_all_fields(pi)
14321433

1433-
ii = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2002')
1434-
self._check_all_fields(ii)
1434+
pi = PeriodIndex(freq='M', start='1/1/2001', end='1/1/2002')
1435+
self._check_all_fields(pi)
14351436

1436-
ii = PeriodIndex(freq='D', start='12/1/2001', end='1/1/2002')
1437-
self._check_all_fields(ii)
1437+
pi = PeriodIndex(freq='D', start='12/1/2001', end='1/1/2002')
1438+
self._check_all_fields(pi)
14381439

1439-
ii = PeriodIndex(freq='B', start='12/1/2001', end='1/1/2002')
1440-
self._check_all_fields(ii)
1440+
pi = PeriodIndex(freq='B', start='12/1/2001', end='1/1/2002')
1441+
self._check_all_fields(pi)
14411442

1442-
ii = PeriodIndex(freq='H', start='12/31/2001', end='1/1/2002 23:00')
1443-
self._check_all_fields(ii)
1443+
pi = PeriodIndex(freq='H', start='12/31/2001', end='1/1/2002 23:00')
1444+
self._check_all_fields(pi)
14441445

1445-
ii = PeriodIndex(freq='Min', start='12/31/2001', end='1/1/2002 00:59')
1446-
self._check_all_fields(ii)
1446+
pi = PeriodIndex(freq='Min', start='12/31/2001', end='1/1/2002 00:59')
1447+
self._check_all_fields(pi)
14471448

1448-
ii = PeriodIndex(freq='S', start='12/31/2001', end='1/1/2001 00:00:01')
1449-
self._check_all_fields(ii)
1449+
pi = PeriodIndex(freq='S', start='12/31/2001', end='1/1/2001 00:00:01')
1450+
self._check_all_fields(pi)
14501451

14511452
end_intv = Period('2006-12-31', 'W')
14521453
i1 = PeriodIndex(end=end_intv, periods=10)
1453-
self._check_all_fields(ii)
1454+
self._check_all_fields(pi)
14541455

14551456
def _check_all_fields(self, periodindex):
14561457
fields = ['year', 'month', 'day', 'hour', 'minute',

‎pandas/tseries/tools.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,8 @@ def parse_time_string(arg, freq=None):
135135
"""
136136
from pandas.core.format import print_config
137137
from pandas.tseries.offsets import DateOffset
138+
from pandas.tseries.frequencies import (_get_rule_month, _month_numbers,
139+
_get_freq_str)
138140

139141
if not isinstance(arg, basestring):
140142
return arg
@@ -165,7 +167,17 @@ def parse_time_string(arg, freq=None):
165167
y = int(y_str)
166168
if add_century:
167169
y += 2000
168-
ret = default.replace(year=y, month=(q-1)*3+1)
170+
171+
if freq is not None:
172+
# hack attack, #1228
173+
mnum = _month_numbers[_get_rule_month(freq)] + 1
174+
month = (mnum + (q - 1) * 3) % 12 + 1
175+
if month > mnum:
176+
y -= 1
177+
else:
178+
month = (q - 1) * 3 + 1
179+
180+
ret = default.replace(year=y, month=month)
169181
return ret, ret, 'quarter'
170182

171183
is_mo_str = freq is not None and freq == 'M'

0 commit comments

Comments
 (0)
Please sign in to comment.