Я пытаюсь адаптировать Pandas.Series с определенной частотой к Pandas.Series с другой частотой. Поэтому я использовал функцию повторной выборки, но она не распознает, например, что «M» является подпериодом «3M» и выдает ошибку.
import pandas as pd
idx_1 = pd.period_range('2017-01-01', periods=6, freq='M')
data_1 = pd.Series(range(6), index=idx_1)
data_higher_freq = data_1.resample('3M', kind = "Period").sum()
Вызывает следующее исключение:
Traceback (most recent call last): File "/home/mitch/Programs/Infrastructure_software/Sandbox/spyderTest.py", line 15, in <module>
data_higher_freq = data_1.resample('3M', kind = "Period").sum() File "/home/mitch/anaconda3/lib/python3.6/site-packages/pandas/core/resample.py", line 758, in f return self._downsample(_method, min_count=min_count) File "/home/mitch/anaconda3/lib/python3.6/site-packages/pandas/core/resamplepy", line 1061, in _downsample 'sub or super periods'.format(ax.freq, self.freq))
pandas._libs.tslibs.period.IncompatibleFrequency: Frequency <MonthEnd> cannot be resampled to <3 * MonthEnds>, as they are not sub or super periods
Похоже, это связано с функцией pd.tseries.frequencies.is_subperiod:
import pandas as pd
pd.tseries.frequencies.is_subperiod('M', '3M')
pd.tseries.frequencies.is_subperiod('M', 'Q')
На самом деле он возвращает False для первой команды и True для второй.
Я был бы очень признателен за любые подсказки по поводу любого решения.
Спасибо.
Чтобы уточнить, я также запускаю python 3.6 с Pandas 0.23.1






Попробуйте перейти с PeriodIndex на DateTimeIndex перед передискретизацией:
import pandas as pd
idx_1 = pd.period_range('2017-01-01', periods=6, freq='M')
data_1 = pd.Series(range(6), index=idx_1)
data_1.index = data_1.index.astype('datetime64[ns]')
data_higher_freq = data_1.resample('3M', kind='period').sum()
Выход:
data_higher_freq
Out[582]:
2017-01 3
2017-04 12
Freq: 3M, dtype: int64
Большое спасибо ! Я считаю, что мне придется использовать такие операции, чтобы переключаться между datetime и period. панды
pd.tseries.frequencies.is_subperiod('M', '3M')дает мнеNonetypeвместоbool. Но ресэмплы меня устраивают. Я запускаю Python 3.6.