熊猫 - 将HH:MM:SS.F字符串转换为秒 - 警告:HH有时会超过24H

时间:2016-11-08 11:04:37

标签: date datetime pandas seconds

我有以下数据框:

  

**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

我需要将两列,平均互动时间和总互动时间转换为秒。

问题是总交互时间超过24小时。

我发现以下代码大部分都有效。但是,当总交互时间超过24小时时,它会给我

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

这是我目前正在使用的功能,我从另一个Stack Overflow问题中获取了平均交互时间和总交互时间:

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'))

如果有更简单的方法,请告诉我。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

我认为您需要先转换to_timedelta然后转换为seconds astype

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