问题描述
我有一个数据帧,它以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”格式的时间,因此这会将小时部分添加到字符串的开头。