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
4 Réponses :
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
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
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
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
vous devez d'abord convertir date-colonne en datetime comme ceci: df ['date'] = pd.to_datetime (df ['date'])