Python - Pandas - проблема с передискретизацией

Я пытаюсь адаптировать 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 для второй.

Я был бы очень признателен за любые подсказки по поводу любого решения.

Спасибо.

pd.tseries.frequencies.is_subperiod('M', '3M') дает мне Nonetype вместо bool. Но ресэмплы меня устраивают. Я запускаю Python 3.6.
Mankind_008 08.07.2018 01:21

Чтобы уточнить, я также запускаю python 3.6 с Pandas 0.23.1

Michel 09.07.2018 00:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
498
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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. панды

Michel 08.07.2018 17:03

Другие вопросы по теме