使用熊猫计算以毫秒为单位的时差

时间:2020-09-23 10:40:46

标签: pandas timestamp

我有一个数据框timings,如下所示:

    start_ms                     end_ms
0   2020-09-01T08:11:19.336Z     2020-09-01T08:11:19.336Z
1   2020-09-01T08:11:20.652Z     2020-09-01T08:11:20.662Z
2   2020-09-01T08:11:20.670Z     2020-09-01T08:11:20.688Z

我正在尝试计算每行start_msend_ms之间的时间差(以毫秒为单位),即我希望得到结果

    start_ms                     end_ms                       diff
0   2020-09-01T08:11:19.336Z     2020-09-01T08:11:19.336Z     0
1   2020-09-01T08:11:20.652Z     2020-09-01T08:11:20.662Z     10
2   2020-09-01T08:11:20.670Z     2020-09-01T08:11:20.688Z     18

我可以逐列将时间戳转换为日期时间,但是我不确定是否保留值的顺序。

start_ms_time = pd.to_datetime(timings['start_ms'])
end_ms_time = pd.to_datetime(timings['end_ms'])

是否可以在timings中将时间戳转换为日期时间,并添加时差列?我什至需要转换以获取差异?如何计算以毫秒为单位的时差?

1 个答案:

答案 0 :(得分:2)

Series.sub减去列,然后使用Series.dt.components

start_ms_time = pd.to_datetime(timings['start_ms'])
end_ms_time = pd.to_datetime(timings['end_ms'])

timings['diff'] = end_ms_time.sub(start_ms_time).dt.components.milliseconds
print (timings)
                   start_ms                    end_ms  diff
0  2020-09-01T08:11:19.336Z  2020-09-01T08:11:19.336Z     0
1  2020-09-01T08:11:20.652Z  2020-09-01T08:11:20.662Z    10
2  2020-09-01T08:11:20.670Z  2020-09-01T08:11:20.688Z    18

或将Series.dt.total_seconds乘以1000并乘以整数:

timings['diff'] = end_ms_time.sub(start_ms_time).dt.total_seconds().mul(1000).astype(int)
print (timings)
                   start_ms                    end_ms  diff
0  2020-09-01T08:11:19.336Z  2020-09-01T08:11:19.336Z     0
1  2020-09-01T08:11:20.652Z  2020-09-01T08:11:20.662Z    10
2  2020-09-01T08:11:20.670Z  2020-09-01T08:11:20.688Z    18