Временные ряды / Функциональность дат
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