使用 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_ms
和end_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_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
【讨论】:
以上是关于使用 Pandas 计算以毫秒为单位的时间差的主要内容,如果未能解决你的问题,请参考以下文章
如何在c ++中计算冒泡排序、插入排序和选择排序函数的时间(以毫秒为单位)