使用 Pandas 计算以毫秒为单位的时间差

Posted

技术标签:

【中文标题】使用 Pandas 计算以毫秒为单位的时间差【英文标题】:Calculate time difference in milliseconds using Pandas 【发布时间】:2020-09-23 10:40:46 【问题描述】:

我有一个数据框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】:

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_seconds1000 的倍数并转换为整数:

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

【讨论】:

以上是关于使用 Pandas 计算以毫秒为单位的时间差的主要内容,如果未能解决你的问题,请参考以下文章

如何在c ++中计算冒泡排序、插入排序和选择排序函数的时间(以毫秒为单位)

FFMPEG:将当前时间(以毫秒为单位)嵌入到视频中

c++代码执行定时器返回0,需要以毫秒为单位输出

计算时差,结果以 Seconds.ms (xxxx.xxx) 为单位

MFC 以毫秒为单位的测量功能

如何在 c++ 中以毫秒为单位获得系统启动时间?