2017-10-12 113 views
1

次專欄中,我有次列像這樣減去時間值在大熊貓

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

我的目標是減去所有這一切的時候了第一次。爲了做到這一點,我轉換列datetime.time類型和減去第一個值,所有列:

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

然而,這樣做我得到一個錯誤:

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

你可以建議一個聰明和優雅的方式,以實現我的目標?

回答

1

使用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] 

而且如果需要的時候:

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 

與輸出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

最後一件事:可以說,我想繞一圈基於小數的數字我應該怎麼做?在此先感謝:) –

+0

那麼'00:06:26.061100'的輸出是什麼? – jezrael

+0

00:06:26.061100將是00:06:26/ 00:06:28.510000將是00:06:28 –