web-dev-qa-db-fra.com

Comment extraire uniquement le mois et le jour d'un objet datetime?

J'essayais de faire un nuage de points, et mon axe x doit être chaque jour individuel dans une année. J'ai d'abord lu dans le fichier de données et j'obtiens la colonne de date, qui est remplie d'entiers comme 19800801. Je convertis donc ce integer en datetime en écrivant:

datetimes_0 = datetime.strptime(str(dates_pitts[0]), '%Y%m%d')

Ensuite, je veux extraire uniquement le mois et le jour de l'objet datetime en écrivant:

s = datetimes_0.strftime("%m%d")

J'ai réalisé qu'ils retournent la valeur de strftime n'est plus un objet datetime alors j'ai essayé de le reconvertir en objet datetime en faisant

s0= datetime.strptime(s, '%m%d')

Mais au lieu de me donner seulement le mois et le jour, cela me rend toute l'année, le mois et le jour. Ma question est de savoir comment extraire un objet datetime uniquement du mois et du jour (les deux) à partir d'un entier donné comme 19800801?

6
Candice Zhang

Si vous essayez de tracer des données temporelles dans matplotlib, l'approche habituelle consiste à convertir d'abord vos dates en objets datatime, puis à obtenir matplotlib pour convertir ces valeurs dans sa propre représentation interne à l'aide de date2num() fonction. Ensuite, vous pouvez indiquer à matplotlib comment formater les graduations sur l'axe des x en utilisant un formateur, dans ce cas un DateFormatter() . Ainsi, vous pouvez par exemple choisir d'afficher le mois et le jour pour chaque tick.

Dans cet exemple, j'affiche le mois, avec le jour sur la ligne ci-dessous:

from matplotlib import pyplot, dates
from datetime import datetime

data = [("19800801", 16), ("19800810", 10), ("19800901", 15), ("19800905", 14)]

xaxis = [datetime.strptime(d, '%Y%m%d') for d, v in data]
yaxis = [v for d, v in data]

ax = pyplot.gca()
xaxis = dates.date2num(xaxis)    # Convert to maplotlib format
hfmt = dates.DateFormatter('%m\n%d')
ax.xaxis.set_major_formatter(hfmt)

pyplot.xlabel('Date')
pyplot.ylabel('Value')
pyplot.plot(xaxis, yaxis)
pyplot.tight_layout()

pyplot.show()

Cela s'afficherait comme suit:

month day xaxis matplotlib demo

Vous pouvez ensuite étendre ceci pour utiliser une DayLocator() qui indique à matplotlib de placer les xticks aux emplacements exacts du jour comme suit:

ax.xaxis.set_major_locator(dates.DayLocator())

Te donne:

plot using day locator

10
Martin Evans

Cela prendra un entier (en supposant que c'est une époque valide) et le convertira en un objet python datetime:

>>> import datetime
>>> date = datetime.datetime.fromtimestamp(19800801)
>>> print date.month
8
>>> print date.day
17

ou en utilisant strftime (renvoie une chaîne et non un objet datetime):

>>> datetime.datetime.fromtimestamp(19800801).strftime('%m%d')
'0817'

sortie du mois et du jour comme un seul entier:

>>> int(datetime.datetime.fromtimestamp(19800801).strftime('%m%d'))
817
8
GracefulRestart