J'ai ce format comme objet 2020-11-18 10: 36: 29.772234 +0000 UTC, je veux convertir en heure de la date

Nov 23 2020

2020-11-20 23:07:59.381081 +0000 UTC

Je lis un fichier csv avec des pandas et dans un dataframe il y a une colonne d'horodatage qui est objet. Je n'ai pas pu convertir en datetime ni lire le +0000 UTC au format

J'ai essayé ce qui suit:

datetimeObj = datetime.strptime('2020-11-21 22:16:25.389601 +0000 UTC', '%Y-%m-%d %H:%M:%S.%f %Z')

mais le% Z me donne une erreur. Un conseil pour un débutant dans le monde des python et pandas?

Réponses

3 LorenaGil Nov 23 2020 at 04:10

Vous devez également ajouter% z avant% Z.

  • % z fait référence au décalage sous la forme + HHMM ou -HHMM.
  • % Z fait référence au nom du fuseau horaire.

Essaye ça:

datetime_object = datetime.strptime('2020-11-20 23:07:59.381081 +0000 UTC', '%Y-%m-%d %H:%M:%S.%f %z %Z')
1 MrFuppes Nov 23 2020 at 17:31

En supposant que vous ayez des chaînes datetime dans ce format dans un pandas DataFrame, je suggérerais de supprimer le +0000depuis pd.to_datetimene sera pas analysé +0000et UTC en même temps .

import pandas as pd

df = pd.DataFrame({'timestamp':["2020-11-20 23:07:59.381081 +0000 UTC"]})

df['datetime'] = pd.to_datetime(df['timestamp'].str.replace(" +0000", "", regex=False))

# df['datetime']
# 0   2020-11-20 23:07:59.381081+00:00
# Name: datetime, dtype: datetime64[ns, UTC]

Pourquoi ne pas simplement dépouiller le UTC? Contrairement à un décalage UTC de +0000, il est sans ambiguïté. +0000 pourrait également provenir d'un fuseau horaire qui se trouve juste à avoir UTC + 0 à l'heure représentée dans l'horodatage.