J'ai lu beaucoup de réponses SO mais je ne trouve pas de solution claire.
J'ai ces données dans un df appelé day1
Qui représente les heures:
1 10:53
2 12:17
3 14:46
4 16:36
5 18:39
6 20:31
7 22:28
Name: time, dtype: object>
Je veux le convertir dans un format d'heure. Mais quand je fais ça:
day1.time = pd.to_datetime(day1.time, format='H%:M%')
Le résultat comprend la date d'aujourd'hui:
1 2015-09-03 10:53:00
2 2015-09-03 12:17:00
3 2015-09-03 14:46:00
4 2015-09-03 16:36:00
5 2015-09-03 18:39:00
6 2015-09-03 20:31:00
7 2015-09-03 22:28:00
Name: time, dtype: datetime64[ns]>
Il semble que l'argument format
ne fonctionne pas - comment puis-je obtenir l'heure comme indiqué ici sans la date?
Mise à jour
Les formats suivants formulent l'heure correctement, mais d'une manière ou d'une autre, la colonne est toujours un type d'objet. Pourquoi ne se convertit-il pas en datetime64
?
day1['time'] = pd.to_datetime(day1['time'], format='%H:%M').dt.time
1 10:53:00
2 12:17:00
3 14:46:00
4 16:36:00
5 18:39:00
6 20:31:00
7 22:28:00
Name: time, dtype: object>
Après avoir effectué la conversion, vous pouvez utiliser l'accesseur datetime dt
pour accéder uniquement au composant hour
ou time
:
In [51]:
df['hour'] = pd.to_datetime(df['time'], format='%H:%M').dt.hour
df
Out[51]:
time hour
index
1 10:53 10
2 12:17 12
3 14:46 14
4 16:36 16
5 18:39 18
6 20:31 20
7 22:28 22
Aussi votre chaîne de format H%:M%
est mal formé, il est susceptible de soulever un ValueError: ':' is a bad directive in format 'H%:M%'
Concernant votre dernier commentaire, le dtype est datetime.time
pas datetime
:
In [53]:
df['time'].iloc[0]
Out[53]:
datetime.time(10, 53)
Vous pouvez utiliser to_timedelta
pd.to_timedelta(df+':00')
Out[353]:
1 10:53:00
2 12:17:00
3 14:46:00
4 16:36:00
5 18:39:00
6 20:31:00
7 22:28:00
Name: Time, dtype: timedelta64[ns]