熊猫:将列

问题描述

我有一个数据帧,它以mm:ss.ms或00:00.00的格式将时间表示为分钟和秒。我需要使用dtype float将整个值列转换为秒。数据框列如下所示:

resultsorig['fastestLapTime']
Out[41]: 
0        01:27.5
1        01:27.7
2        01:28.1
3        01:28.6
4        01:27.4
  
24735    01:21.8
24736    01:22.5
24737    01:22.0
24738    01:20.4
24739    01:24.0
Name: fastestLapTime,Length: 24740,dtype: object

我发现的所有方法都无效。

更新:过去我尝试过以下方法,但确实有效,但不适用于此数据框,我不确定为什么:

resultsorig=resultsorig[~resultsorig['fastestLapTime'].str.contains(":")]
resultsorig['fastestLapTime']=pd.to_numeric([resultsorig['fastestLapTime'])

解决方法

尝试一下。

df['fastestLapTime']=df['fastestLapTime'].apply(lambda x: float(x.split(':')[0])*60+float(x.split(':')[1]))
,

您没有提供预期的输出,所以我猜了

df['fastestLapTime'].map(lambda x: sum(x * float(t) for x,t in zip([60.0,1.0],x.split(':')))

0    87.5
1    87.7
2    88.1
3    88.6
4    87.4
5    81.8
6    82.5
7    82.0
8    80.4
9    84.0
,

您可以使用pandas to_timedelta()函数将这些字符串转换为timedelta值。 timedelta值具有total_seconds()方法,该方法将为您提供所需的结果。在熊猫中,您可以通过total_seconds()访问器访问dt方法。

import pandas as pd
resultsorig = pd.DataFrame(['01:27.5','01:27.7','01:28.1','01:28.6','01:27.4'],columns = ['fastestLapTime'])

pd.to_timedelta("00:" + resultsorig['fastestLapTime']).dt.total_seconds()

产生

0    87.5
1    87.7
2    88.1
3    88.6
4    87.4
Name: fastestLapTime,dtype: float64

"00:" + resultsorig['fastestLapTime']是必需的,因为to_timedelta()期望使用“ HH:MM:SS.m”格式的时间,因此这会将小时部分添加到字符串的开头。