web-dev-qa-db-fra.com

Comment créer un pandas DatetimeIndex avec l'année comme fréquence?

À l'aide de la fonction pandas.date_range(startdate, periods=n, freq=f), vous pouvez créer une plage d'objets pandas Timestamp où le paramètre facultatif freq indique la fréquence (seconde, minute , heure, jour ...) dans la gamme.

Le documentation ne mentionne pas les littéraux qui devraient être transmis, mais après quelques minutes, vous pouvez facilement trouver la plupart d'entre eux.

  • 's': deuxième
  • 'min': minute
  • "H": heure
  • "D": jour
  • 'w': semaine
  • 'm': mois

Cependant, aucun de 'y', 'Y', 'yr', etc. ne crée de dates avec l'année comme fréquence. Quelqu'un sait-il quoi passer ou si c'est possible?

21
Drunken Master

Indexation annuelle au début ou à la fin de l'année

La fréquence est freq='A' Pour la fréquence de fin d'année, 'AS' Pour le début d'année. Vérifiez les alias dans la documentation .

par exemple. pd.date_range(start=pd.datetime(2000, 1, 1), periods=4, freq='A')

retour

DatetimeIndex(['2000-12-31', '2001-12-31', '2002-12-31', '2003-12-31'], dtype='datetime64[ns]', freq='A-DEC', tz=None)

Indexation annuelle au début d'un mois arbitraire

Si vous avez besoin qu'elle soit annuelle à partir d'un moment particulier, utilisez un décalage ancré , par exemple. pd.date_range(start=pd.datetime(2000, 1, 1), periods=10, freq='AS-AUG')

retour

DatetimeIndex(['2000-08-01', '2001-08-01', '2002-08-01', '2003-08-01'], dtype='datetime64[ns]', freq='AS-AUG', tz=None)

Indexation annuelle à partir d'une date arbitraire

Pour indexer à partir d'une date arbitraire, commencez la série à cette date et utilisez un objet DateOffset personnalisé.

par exemple. pd.date_range(start=pd.datetime(2000, 9, 10), periods=4, freq=pd.DateOffset(years=1))

retour

DatetimeIndex(['2000-09-10', '2001-09-10', '2002-09-10', '2003-09-10'], dtype='datetime64[ns]', freq='<DateOffset: kwds={'years': 1}>', tz=None)

38
jmz

Avec tous ces hacks, il existe un moyen clair:

pd.date_range(start=datetime.datetime.now(),periods=5,freq='A')

A: Annuellement.

365D? Vraiment? Qu'en est-il de années bissextiles ?

3
CT Zhu

Vous pouvez utiliser le mois puis choisir tous les 12 mois:

months=pandas.date_range(start=datetime.datetime.now(),periods=120,freq='M')
year=[months[11*i] for i in range(12)]

Vous pouvez également faire:

usingDays=pandas.date_range(start=datetime.datetime.now(),periods=10,freq='365D')

mais cela ne fonctionnera pas si bien avec les années bissextiles.

1
rofls

Vous pouvez utiliser des multiples pour les chaînes de fréquence. Par exemple:

pd.date_range ('01/01/2010 ', périodes = 10, freq =' 365D ')

Ce code vous donnera une série avec 01/01/2010, 01/01/2011, etc., qui je pense est ce que vous recherchez. Bien sûr, le problème ici est que vous rencontrerez des problèmes avec les années bissextiles.

0
rhozzy