Как создать pandas DatetimeIndex с частотой года?

С помощью pandas.date_range(startdate, periods=n, freq=f) функция вы можете создать диапазон панд Timestamp объекты, где freq необязательный параметр указывает частоту (секунда, минута, час, день...) в ассортименте.

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

  • 's' : второй
  • 'min': минута
  • 'H' : час
  • 'D' : день
  • 'w' : неделя
  • 'm': месяц

однако ни один из "y", "Y", " yr " и т. д. создавайте даты с частотой год. Кто-нибудь знает, что передать, или, если это возможно вообще?

4 ответов


ежегодная индексация до начала или конца года

частота 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=datetime.datetime.now(),periods=5,freq='A')

A : ежегодно.

365D? Неужели? Насчет високосные годы?


вы можете использовать месяц, а затем выбрать каждый 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')

но это не будет работать так хорошо с високосными годами.


вы можете использовать кратные частоты строк. Например:

pd.date_range ('01/01/2010', periods=10,freq='365D')

этот код даст вам целый ряд с 01/01/2010, 01/01/2011, и т. д. думаю, это то, что ты ищешь. Конечно, проблема здесь в том, что вы столкнетесь с проблемами с високосными годами.