2016-11-08 48 views
2

我有以下數據框:熊貓 - 轉換HH:MM:SS.F串秒 - 警告:HH有時越過24H

**flashtalking_df =**

+--------------+--------------------------+------------------------+ 
| Placement ID | Average Interaction Time | Total Interaction Time | 
+--------------+--------------------------+------------------------+ 
|  2041083 | 00:01:04.12182   | 24:29:27.500   | 
|  2041083 | 00:00:54.75043   | 52:31:48.89108   | 
+--------------+--------------------------+------------------------+ 

那裏00:01 :04.12182 = HH:MM:SS.F

我需要將兩列,平均交互時間和總交互時間轉換爲秒。

問題是Total Interaction Time超過了24小時。

我發現了大部分工作的下面的代碼。然而,當總交互時間推移超過24小時,它給了我

ValueError: time data '24:29:27.500' does not match format '%H:%M:%S.%f'

這是我目前使用的功能,這是我從另一個堆棧溢出的問題抓起,對於平均互動時間和總交互時間:

flashtalking_df['time'] = flashtalking_df['Total Interaction Time'].apply(lambda x: datetime.datetime.strptime(x,'%H:%M:%S.%f')) 
flashtalking_df['timedelta'] = flashtalking_df['time'] - datetime.datetime.strptime('00:00:00.00000','%H:%M:%S.%f') 
flashtalking_df['Total Interaction Time'] = flashtalking_df['timedelta'].apply(lambda x: x/np.timedelta64(1, 's')) 

如果有更簡單的方法,請讓我知道。

感謝您對所有您的幫助

回答

2

我想你需要先轉換to_timedelta然後secondsastype

df['Average Interaction Time'] = pd.to_timedelta(df['Average Interaction Time']) 
            .astype('timedelta64[s]') 
            .astype(int) 

df['Total Interaction Time'] = pd.to_timedelta(df['Total Interaction Time']) 
            .astype('timedelta64[s]') 
            .astype(int) 
            .map('{:,.2f}'.format) 
print (df) 
    Placement ID Average Interaction Time Total Interaction Time 
0  2041083      64    88,167.00 
1  2041083      54    189,108.00 

解決方案與total_seconds,謝謝NickilMaveli

df['Average Interaction Time'] = pd.to_timedelta(df['Average Interaction Time']) 
            .dt.total_seconds() 
            .map('{:,.2f}'.format) 
df['Total Interaction Time'] = pd.to_timedelta(df['Total Interaction Time']) 
            .dt.total_seconds() 
            .map('{:,.2f}'.format) 

print (df) 
    Placement ID Average Interaction Time Total Interaction Time 
0  2041083     64.12    88,167.50 
1  2041083     54.75    189,108.89 
+0

喜Jezrael!謝謝您的幫助。是否有任何方法可以添加小數分解(例如,88167變成88,167.50) –

+0

請檢查我的更新。 – jezrael

+0

非常感謝你jezreal!在旁註中。當我遇到這種類型的止損時,您是否會推薦我可以採用或參考的任何課程或資源,以便我可以自己解決這些問題? –