熊猫时间作业

时间:2018-08-31 03:32:31

标签: python python-3.x pandas datetime

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

<div class="card-body sub-body">
            <div class="event row" *ngFor="let note of data; let i = index"  [attr.data-index]="i">
                <div class="col-md-9"> {{note.note}} </div>
            <div class="col-md-3 icons" *ngIf="note.creatorId == currentUserId">
                <i class="fa fa-pencil-square-o" aria-hidden="true" (click)="openModal(template1, note, 2)"></i>
                <i class="fa fa-times" aria-hidden="true" (click)="deleteNote(note.id)"></i>
            </div>
        </div>
    </div>

我想在“ TIME” 列中的记录之间执行一次算术操作,以计算时间之间的差异,计算出每场比赛的平均速度。

问题如下:

将文本字符串转换为大熊猫 datetime 时,它保持以下格式:

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

我需要的是时间,所以我要做以下事情

1900-01-01 00:51:50
1900-01-01 00:55:59
1900-01-01 00:49:25

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用to_timedelta代替to_datetime。见下文:

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在上面的评论中所提到的,很难说这是否可以解决您的问题,而无需查看您想运行的代码。

答案 1 :(得分: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