web-dev-qa-db-fra.com

Calculer Pandas Différence de temps DataFrame entre deux colonnes en heures et en minutes

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.

49
sbalajis

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
79
nitin

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.

30
elPastor