J'ai deux colonnes de et à ce jour dans un dataframe
quand j'essaie d'ajouter une nouvelle colonne diff avec pour trouver la différence entre deux dates en utilisant
df['diff'] = df['todate'] - df['fromdate']
Je reçois la colonne diff en jours si plus de 24 heures.
2014-01-24 13:03:12.050000,2014-01-26 23:41:21.870000,"2 days, 10:38:09.820000"
2014-01-27 11:57:18.240000,2014-01-27 15:38:22.540000,03:41:04.300000
2014-01-23 10:07:47.660000,2014-01-23 18:50:41.420000,08:42:53.760000
Comment convertir mes résultats uniquement en heures et en minutes en ignorant les jours et même les secondes.
Les différences d'horodatage des pandas renvoient un objet datetime.timedelta. Cela peut facilement être converti en heures en utilisant la méthode * as_type *, comme si
import pandas
df = pandas.DataFrame(columns=['to','fr','ans'])
df.to = [pandas.Timestamp('2014-01-24 13:03:12.050000'), pandas.Timestamp('2014-01-27 11:57:18.240000'), pandas.Timestamp('2014-01-23 10:07:47.660000')]
df.fr = [pandas.Timestamp('2014-01-26 23:41:21.870000'), pandas.Timestamp('2014-01-27 15:38:22.540000'), pandas.Timestamp('2014-01-23 18:50:41.420000')]
(df.fr-df.to).astype('timedelta64[h]')
produire,
0 58
1 3
2 8
dtype: float64
Cela me rendait dingue puisque la solution .astype()
ci-dessus ne fonctionnait pas pour moi. Mais j'ai trouvé un autre moyen. Je ne l'ai pas chronométré ou quoi que ce soit, mais cela pourrait fonctionner pour d'autres:
t1 = pd.to_datetime('1/1/2015 01:00')
t2 = pd.to_datetime('1/1/2015 03:30')
print pd.Timedelta(t2 - t1).seconds / 3600.0
... si vous voulez des heures. Ou:
print pd.Timedelta(t2 - t1).seconds / 60.0
... si vous voulez des minutes.