熊猫时间操作

问题描述 投票:0回答:2

我有一个数据框,其中包含来自经纪人的信息,数据显示行进的距离,花费的时间和比赛的日期。

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

这导致我遇到下一个问题,该列现在是“对象”类型,我无法对其执行任何类型的操作。

如何在不丢失日期时间格式的情况下将列转换为时间?并用它执行操作。

例如,我想计算速度,比赛之间的时间和频率之间的差异。

python python-3.x pandas datetime
2个回答
1
投票

假设距离为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

2
投票

而不是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上面的评论所提到的,很难说这是否会在没有看到您想要运行的代码的情况下解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.