Skip to content

Commit 0b7e917

Browse files
cancan101jreback
authored andcommitted
ERROR: better expection for passing a MS frequency (GH5332)
1 parent 7f1dc9c commit 0b7e917

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

doc/source/release.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ Bug Fixes
362362
- Bug in adding np.timedelta64 to DatetimeIndex with tz outputs incorrect result (:issue:`6818`)
363363
- Bug in ``DataFrame.replace()`` where changing a dtype through replacement
364364
would only replace the first occurrence of a value (:issue:`6689`)
365+
- Better error message when passing a frequency of 'MS' in ``Period`` construction (GH5332)
365366

366367
pandas 0.13.1
367368
-------------

pandas/tseries/frequencies.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ def get_base_alias(freqstr):
321321
"""
322322
return _base_and_stride(freqstr)[0]
323323

324-
_dont_uppercase = ['MS', 'ms']
324+
_dont_uppercase = set(('MS', 'ms'))
325325

326326

327327
def get_offset(name):
@@ -481,7 +481,7 @@ def _period_alias_dictionary():
481481
H_aliases = ["H", "HR", "HOUR", "HRLY", "HOURLY"]
482482
T_aliases = ["T", "MIN", "MINUTE", "MINUTELY"]
483483
S_aliases = ["S", "SEC", "SECOND", "SECONDLY"]
484-
L_aliases = ["L", "MS", "MILLISECOND", "MILLISECONDLY"]
484+
L_aliases = ["L", "ms", "MILLISECOND", "MILLISECONDLY"]
485485
U_aliases = ["U", "US", "MICROSECOND", "MICROSECONDLY"]
486486
N_aliases = ["N", "NS", "NANOSECOND", "NANOSECONDLY"]
487487

@@ -599,10 +599,13 @@ def _period_group(freqstr):
599599
def _period_str_to_code(freqstr):
600600
# hack
601601
freqstr = _rule_aliases.get(freqstr, freqstr)
602-
freqstr = _rule_aliases.get(freqstr.lower(), freqstr)
602+
603+
if freqstr not in _dont_uppercase:
604+
freqstr = _rule_aliases.get(freqstr.lower(), freqstr)
603605

604606
try:
605-
freqstr = freqstr.upper()
607+
if freqstr not in _dont_uppercase:
608+
freqstr = freqstr.upper()
606609
return _period_code_map[freqstr]
607610
except KeyError:
608611
try:

pandas/tseries/tests/test_period.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from numpy.ma.testutils import assert_equal
1212

1313
from pandas import Timestamp
14-
from pandas.tseries.frequencies import MONTHS, DAYS
14+
from pandas.tseries.frequencies import MONTHS, DAYS, _period_code_map
1515
from pandas.tseries.period import Period, PeriodIndex, period_range
1616
from pandas.tseries.index import DatetimeIndex, date_range, Index
1717
from pandas.tseries.tools import to_datetime
@@ -485,6 +485,13 @@ def test_constructor_infer_freq(self):
485485
p = Period('2007-01-01 07:10:15.123400')
486486
self.assertEqual(p.freq, 'U')
487487

488+
def test_asfreq_MS(self):
489+
initial = Period("2013")
490+
491+
self.assertEqual(initial.asfreq(freq="M", how="S"), Period('2013-01', 'M'))
492+
self.assertRaises(ValueError, initial.asfreq, freq="MS", how="S")
493+
tm.assertRaisesRegexp(ValueError, "Unknown freqstr: MS", pd.Period, '2013-01', 'MS')
494+
self.assertTrue(_period_code_map.get("MS") is None)
488495

489496
def noWrap(item):
490497
return item

0 commit comments

Comments
 (0)