Как создать pandas DatetimeIndex с частотой года?
Используя pandas.date_range(startdate, periods=n, freq=f)
вы можете создать диапазон объектов Timestamp
pandas, где дополнительный параметр freq
обозначает частоту (секунда, минута, час, день...) в диапазоне.
В документации не упоминаются литералы, которые, как ожидается, будут переданы, но через несколько минут вы сможете легко найти большинство из них.
- 's': второй
- 'мин': минута
- "H": час
- 'D': день
- 'w': неделя
- 'm': месяц
Тем не менее, ни один из "y", "Y", "yr" и т.д. Не создает даты с годом в качестве частоты. Кто-нибудь знает, что пройти, или если это вообще возможно?
Ответы
Ответ 1
Ежегодная индексация к началу или концу года
Частота - freq='A'
для частоты на конец года, 'AS'
для начала года. Проверьте псевдонимы в документации.
например. pd.date_range(start=pd.datetime(2000, 1, 1), periods=4, freq='A')
возвращается
DatetimeIndex(['2000-12-31', '2001-12-31', '2002-12-31', '2003-12-31'], dtype='datetime64[ns]', freq='A-DEC', tz=None)
Ежегодное индексирование до начала произвольного месяца
Если вам нужно, чтобы он был годовым с определенного времени, используйте привязанное смещение, например. pd.date_range(start=pd.datetime(2000, 1, 1), periods=10, freq='AS-AUG')
возвращается
DatetimeIndex(['2000-08-01', '2001-08-01', '2002-08-01', '2003-08-01'], dtype='datetime64[ns]', freq='AS-AUG', tz=None)
Ежегодное индексирование с произвольной даты
Чтобы индексировать с произвольной даты, начните серию в эту дату и используйте пользовательский объект DateOffset
.
например. pd.date_range(start=pd.datetime(2000, 9, 10), periods=4, freq=pd.DateOffset(years=1))
возвращается
DatetimeIndex(['2000-09-10', '2001-09-10', '2002-09-10', '2003-09-10'], dtype='datetime64[ns]', freq='<DateOffset: kwds={'years': 1}>', tz=None)
Ответ 2
Со всеми этими хаками существует четкий способ:
pd.date_range(start=datetime.datetime.now(),periods=5,freq='A')
A
: Ежегодно.
365D
? В самом деле? Как насчет високосных лет?
Ответ 3
Вы можете использовать месяц, а затем выбирать каждый 12-й месяц:
months=pandas.date_range(start=datetime.datetime.now(),periods=120,freq='M')
year=[months[11*i] for i in range(12)]
Вы также можете сделать:
usingDays=pandas.date_range(start=datetime.datetime.now(),periods=10,freq='365D')
но это не будет работать так хорошо с високосными годами.
Ответ 4
Вы можете использовать кратность для частотных строк. Например:
pd.date_range ('01/01/2010', периоды = 10, частота = '365d')
Этот код даст вам серию 01/01/2010, 01/01/2011 и т.д., Которые, я думаю, являются тем, что вы ищете. Конечно, проблема здесь в том, что вы столкнетесь с проблемами с високосными годами.