5
votes

Python obtient l'heure de l'horodatage

J'ai besoin de classer les horodatages en fonction de l'heure, par exemple si c'est entre 7 h et 9 h, ce sera le matin. J'ai des horodatages que je prends de mon fichier csv et je n'ai besoin que de l'heure pour que je puisse classer le nombre avec des instructions if.

Je prendrai les horodatages de la colonne date et créerai une nouvelle colonne nommé heure ,

df['hour'] = df.date.dt.hour

mais cela me donne l'erreur suivante: AttributeError: ne peut utiliser l'accesseur .dt qu'avec des valeurs datetimelike strong >

Les horodatages sont comme suit: 14/03/2016 17:24:55


1 commentaires

vous devez d'abord convertir date-colonne en datetime comme ceci: df ['date'] = pd.to_datetime (df ['date'])


4 Réponses :


3
votes

Je ne suis pas sûr du type d'objet df , mais vous pouvez convertir les horodatages en objets datetime puis utiliser les attributs des objets datetime pour accéder aux attributs d'horodatage:

from datetime import datetime

d = datetime.strptime('2016-03-14 17:24:55', '%Y-%m-%d %H:%M:%S')
df['hour'] = d.hour

Pour en savoir plus sur le module datetime sur ce lien


0 commentaires

0
votes

Vous devez créer un objet datetime avec la chaîne d'horodatage extraite de vos données d'entrée CSV:

In [1]: import datetime

In [2]: s = '2016-03-14 17:24:55'

In [3]: d = datetime.datetime.fromisoformat(s)

In [4]: d.hour
Out[4]: 17


0 commentaires

1
votes

Vous devez d'abord convertir votre colonne "date" en objet datetime:

df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d %H:%M:%S')
df['hour'] = df['date'].dt.hour


0 commentaires

0
votes

La raison pour laquelle vous obtenez une AttributeError: vous ne pouvez utiliser l'accesseur .dt qu'avec des valeurs datetimelike est probablement parce que cette série particulière n'est pas de type d'objet datetime .

Comme les états d'erreur, l'attribut .dt est disponible pour les objets datetime. La première chose à faire est donc de vérifier le type des entrées. Supposons que les valeurs ne soient pas des objets datetime alors pour les convertir,

spécifiez datetime_format = '% Y-% m-% d% H:% M:% S' et utilisez. dt de la manière suivante pour obtenir les valeurs de temps:

data['start_datetime'] = pd.to_datetime(data['start_datetime'], format=datetime_format)
h = data['start_datetime'].dt.hour
m = data['start_datetime'].dt.minute
s = data['start_datetime'].dt.second


0 commentaires