Spec-Zone.ru › pandas 0.23

Временные ряды / Функциональность дат

pandas зарекомендовал себя как очень успешный инструмент для работы с временными рядами данных, особенно в области финансового анализа данных. Используя типы данных NumPy datetime64 и timedelta64, мы объединили большое количество функций из других библиотек Python, таких как scikits.timeseries, а также создали огромное количество новых функций для обработки временных рядов данных.

При работе с временными рядами данных мы часто будем стремиться к:

  • генерации последовательностей дат и временных интервалов с фиксированной частотой
  • приведению или преобразованию временных рядов к определенной частоте
  • вычислению «относительных» дат на основе различных нестандартных временных интервалов (например, 5 рабочих дней до последнего рабочего дня года) или «прокрутке» дат вперёд или назад

pandas предоставляет относительно компактный и самодостаточный набор инструментов для выполнения вышеперечисленных задач.

Создать диапазон дат:

# 72 hours starting with midnight Jan 1st, 2011
In [1]: rng = pd.date_range('1/1/2011', periods=72, freq='H')

In [2]: rng[:5]
Out[2]: 
DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00',
               '2011-01-01 02:00:00', '2011-01-01 03:00:00',
               '2011-01-01 04:00:00'],
              dtype='datetime64[ns]', freq='H')

Индексирование объектов pandas с датами:

In [3]: ts = pd.Series(np.random.randn(len(rng)), index=rng)

In [4]: ts.head()
Out[4]: 
2011-01-01 00:00:00    0.469112
2011-01-01 01:00:00   -0.282863
2011-01-01 02:00:00   -1.509059
2011-01-01 03:00:00   -1.135632
2011-01-01 04:00:00    1.212112
Freq: H, dtype: float64

Изменение частоты и заполнение пробелов:

# to 45 minute frequency and forward fill
In [5]: converted = ts.asfreq('45Min', method='pad')

In [6]: converted.head()
Out[6]: 
2011-01-01 00:00:00    0.469112
2011-01-01 00:45:00    0.469112
2011-01-01 01:30:00   -0.282863
2011-01-01 02:15:00   -1.509059
2011-01-01 03:00:00   -1.135632
Freq: 45T, dtype: float64

Перевыборка ряда с ежедневной частотой:

# Daily means
In [7]: ts.resample('D').mean()
Out[7]: 
2011-01-01   -0.319569
2011-01-02   -0.337703
2011-01-03    0.117258
Freq: D, dtype: float64

Обзор

В следующей таблице показаны типы классов, относящихся ко времени, которые может обрабатывать pandas, и способы их создания.

Класс Замечания Как создать
Timestamp Представляет собой единственную отметку времени to_datetime, Timestamp
DatetimeIndex Индекс Timestamp to_datetime, date_range, bdate_range, DatetimeIndex
Period Представляет собой единственный временной интервал Period
PeriodIndex Индекс Period period_range, PeriodIndex

Отметки времени против временных интервалов

Данные с отметками времени — это наиболее базовый тип данных временных рядов, который связывает значения с моментами времени. Для объектов pandas это означает использование моментов времени.

In [8]: pd.Timestamp(datetime(2012, 5, 1))
Out[8]: Timestamp('2012-05-01 00:00:00')

In [9]: pd.Timestamp('2012-05-01')

© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.23.4/timeseries.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API