web-dev-qa-db-fra.com

les données temporelles ne correspondent pas au format

Je reçois l'erreur suivante:

time data '07/28/2014 18:54:55.099000' does not match format '%d/%m/%Y %H:%M:%S.%f'

Mais je ne peux pas voir quel paramètre est incorrect dans %d/%m/%Y %H:%M:%S.%f?

C'est le code que j'utilise.

from datetime import datetime
time_value = datetime.strptime(csv_line[0] + '000', '%d/%m/%Y %H:%M:%S.%f')

J'ai ajouté et supprimé le 000 mais j'obtiens la même erreur.

26
Stephane Rolland

Vous avez le mois et le jour permutés:

'%m/%d/%Y %H:%M:%S.%f'

28 ne correspondra jamais à la plage du paramètre mois %m sinon.

Si %m et %d sont correctement analysés dans l'ordre, procédez comme suit:

>>> from datetime import datetime
>>> datetime.strptime('07/28/2014 18:54:55.099000', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)

Vous n'avez pas besoin d'ajouter '000'; %f peut analyser correctement les nombres plus courts:

>>> datetime.strptime('07/28/2014 18:54:55.099', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)
52
Martijn Pieters

Bien que la réponse ci-dessus soit utile et correcte à 100%, j'aimerais ajouter ce qui suit, car seule une combinaison de la réponse ci-dessus et de la lecture du document sur les pandas m'a aidé:

Année à 2 chiffres/4 chiffres

Il est à noter que pour analyser une année à deux chiffres, par exemple '90' au lieu de '1990', un %y est requis au lieu d'un %Y

Inférer l'heure automatiquement

Si l'analyse avec un format prédéfini ne fonctionne toujours pas pour vous, essayez d'utiliser l'indicateur infer_datetime_format=True, par exemple:

yields_df['Date'] = pd.to_datetime(yields_df['Date'], infer_datetime_format=True)

Sachez que cette solution est plus lente que l’utilisation d’un format prédéfini.

11
Fábio Ferreira

Pour comparer la date et l'heure, vous pouvez essayer ceci. Le format de date/heure peut être changé 

from datetime import datetime

>>> a = datetime.strptime("10/12/2013", "%m/%d/%Y")
>>> b = datetime.strptime("10/15/2013", "%m/%d/%Y")
>>> a>b
False
0
Basant Kumar