2017-10-12 4 views
1

J'ai une colonne de temps comme sivaleur temps Soustraire à la colonne des temps dans Pandas

df = pd.DataFrame({'times':['10:59:20.1647', '11:05:46.2258', '11:10:59.4658']}) 

mon but est de soustraire à tout ce fois la première fois. Pour ce faire, je me suis converti la colonne type datetime.time et soustrait la première valeur à toute la colonne:

pd.to_datetime(df['times']).dt.time - pd.to_datetime(df['times']).dt.time.iloc[0] 

Cependant, en ce faisant, je reçois une erreur:

TypeError: unsupported operand type(s) for -: 'datetime.time' and'datetime.time' 

Pourriez-vous suggérer un moyen intelligent et élégant afin d'atteindre mon objectif?

Répondre

1

Utilisation timedeltas:

a = pd.to_timedelta(df['times']) 
b = a - a.iat[0] 
print (b) 
0   00:00:00 
1 00:06:26.061100 
2 00:11:39.301100 
Name: times, dtype: timedelta64[ns] 

Et si les temps de besoin:

c = pd.to_datetime(b).dt.time 
print (c) 
0   00:00:00 
1 00:06:26.061100 
2 00:11:39.301100 
Name: times, dtype: object 

print (c.apply(type)) 
0 <class 'datetime.time'> 
1 <class 'datetime.time'> 
2 <class 'datetime.time'> 
Name: times, dtype: object 

Une autre solution avec sortie timedelta:

a = pd.to_datetime(df['times']) 
b = a - a.iat[0] 
print (b) 
0   00:00:00 
1 00:06:26.061100 
2 00:11:39.301100 
Name: times, dtype: timedelta64[ns] 
+0

Une dernière chose: permet de dire que je veux pour arrondir le sec onds basé sur les décimales que dois-je faire? Merci d'avance :) –

+0

Alors, quelle est la sortie souhaitée de '00: 06: 26.061100'? – jezrael

+0

00: 06: 26.061100 serait 00:06:26/ 00: 06: 28.510000 serait 00:06:28 –