У меня проблемы с созданием панд PeriodIndex с привязкой со смещением, ссылающимся на год, начинающийся месяц
Создание PeriodIndex с месяцем на конец года работает нормально:
>>> per_ind = pd.PeriodIndex(start='2001-01-01', periods=1, freq='A-AUG')
>>> per_ind.start_time
DatetimeIndex(['2000-09-01'], dtype='datetime64[ns]', freq=None)
>>> per_ind.end_time
DatetimeIndex(['2001-08-31'], dtype='datetime64[ns]', freq=None)
>>> per_ind.year
Int64Index([2001], dtype='int64')
таким образом, мы получаем годовой период, заканчивающийся в конце августа 2001 года. Этот год равен 2001
То, что я хотел бы сделать, это создать период, который начинается в августе 2001 года, заканчивается годом позже и имеет год, равный 2001 году (если кто-то заинтересован, это связано с тем, как USDA сообщает о годах урожая; урожай 2001 года год для кукурузы в США, например, 2001-09-01: 2002-08-31)
Я бы предположил, что это так же просто, как изменить аргумент freq на 'AS_AUG', однако:
>>>per_ind = pd.PeriodIndex(start='2001-01-01', periods=1, freq='AS-AUG')
Traceback (most recent call last):
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/tseries/frequencies.py", line 744, in _period_str_to_code
return _period_code_map[freqstr]
KeyError: 'AS-AUG'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-28-fc801b3bbb96>", line 1, in <module>
per_ind = pd.PeriodIndex(start='2001-01-01', periods=1, freq='AS-AUG')
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/core/indexes/period.py", line 236, in __new__
freq, kwargs)
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/core/indexes/period.py", line 288, in _generate_range
subarr, freq = _get_ordinal_range(start, end, periods, freq)
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/core/indexes/period.py", line 1065, in _get_ordinal_range
_, mult = _gfc(freq)
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/tseries/frequencies.py", line 335, in get_freq_code
code = _period_str_to_code(freqstr[0])
File "/space/asd/conda/envs/rd/lib/python3.6/site-packages/pandas/tseries/frequencies.py", line 746, in _period_str_to_code
raise ValueError(_INVALID_FREQ_ERROR.format(freqstr))
ValueError: Invalid frequency: AS-AUG
Кто-нибудь может предложить какое-либо руководство здесь? Я могу добавить атрибут period_year в PeriodIndex, но это очень странно, и должен быть более аккуратный способ решения этой проблемы
EDIT:
Эта проблема возникает в объектах Периода панд - им не могут быть пропущены никакие начальные частоты периода. Есть ли для этого веская причина?