我有一个数据框,其中包含来自经纪人的信息,数据显示行进的距离,花费的时间和比赛的日期。
DISTANCE TIME DATE
9.8 51:50.92 09/08/18
11.1 55:59.70 24/08/18
11.1 49:25.20 29/08/18
我想在“TIME”列中的记录之间执行算术运算作为时间之间的差异,计算每个种族的平均速度。
将文本字符串转换为pandas datetime时,它将保持以下格式:
1900-01-01 00:51:50
1900-01-01 00:55:59
1900-01-01 00:49:25
我需要的是时间,所以我做了以下
df['TIME'] = pd.to_datetime(df['TIME'], format = '%M:%S')
这导致我遇到下一个问题,该列现在是“对象”类型,我无法对其执行任何类型的操作。
如何在不丢失日期时间格式的情况下将列转换为时间?并用它执行操作。
例如,我想计算速度,比赛之间的时间和频率之间的差异。
假设距离为km,使用此速度以km / h为单位:
import pandas as pd
df=pd.DataFrame({'DISTANCE':[9.5,11.1,11.1],'TIME':['51:50.92','55:59.70','49:25.20'],'DATE':['09/08/18','24/08/18','29/08/18']})
df['TIME'] = '00:' + df['TIME']
df['TIME'] = pd.to_timedelta(df['TIME'])
df['SPEED (km/h)']=[df['DISTANCE'][i]/(df['TIME'][i].total_seconds()/3600) for i in df.index]#total_seconds() won't work with a pandas column so you need to apply it to each TIME cell
而不是to_datetime
,你可以使用to_timedelta
。见下文:
df['TIME'] = '00:' + df['TIME']
df['TIME'] = pd.to_timedelta(df['TIME'])
结果是:
DISTANCE TIME DATE
0 9.8 00:51:50.920000 09/08/18
1 11.1 00:55:59.700000 24/08/18
2 11.1 00:49:25.200000 29/08/18
您现在可以在TIME
上使用数学运算。然而,正如Phung Duy Phong上面的评论所提到的,很难说这是否会在没有看到您想要运行的代码的情况下解决您的问题。