Как создать 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, и т. д. думаю, это то, что ты ищешь. Конечно, проблема здесь в том, что вы столкнетесь с проблемами с високосными годами.