如何解决如何以纳秒为单位计算两个 pandas.Timestamp 系列之间的差异
我有两个系列是 pd.Timestamps,它们非常接近。我想获得两个系列之间的元素差异,但要精确到纳秒。
第一系列:
0 2021-05-21 00:02:11.349001429
1 2021-05-21 00:02:38.195857153
2 2021-05-21 00:03:25.527530228
3 2021-05-21 00:03:26.653410069
4 2021-05-21 00:03:26.798157366
第二系列:
0 2021-05-21 00:02:11.348997322
1 2021-05-21 00:02:38.195852267
2 2021-05-21 00:03:25.527526087
3 2021-05-21 00:03:26.653406759
4 2021-05-21 00:03:26.798154350
现在,如果我只是使用 -
运算符,我将截断纳秒差异。它将显示如下内容:
Series1 - Series2
0 00:00:00.000004
1 00:00:00.000004
2 00:00:00.000004
3 00:00:00.000003
4 00:00:00.000003
在计算时间戳之间的差异时,我不想失去纳秒精度。我编写了一个解决方案,该解决方案涉及对每一行执行 for 循环,并计算 pd.Timedelta 中的标量差异,然后从中获取微秒和纳秒。像这样(对于第一个元素):
single_diff = Series1[0] - Series2[0]
single_diff.microseconds * 1000 + single_diff.nanoseconds
4107
有没有更简洁的矢量化方法来代替 for 循环?
解决方法
如果您使用如图所示的 timedelta,您将不会失去精度。内部表示总是纳秒。计算 timedelta 后,您可以转换为整数以获得以纳秒为单位的差异。例如:
import pandas as pd
import numpy as np
s1 = pd.Series(pd.to_datetime(["2021-05-21 00:02:11.349001429","2021-05-21 00:02:38.195857153","2021-05-21 00:03:25.527530228","2021-05-21 00:03:26.653410069","2021-05-21 00:03:26.798157366"]))
s2 = pd.Series(pd.to_datetime(["2021-05-21 00:02:11.348997322","2021-05-21 00:02:38.195852267","2021-05-21 00:03:25.527526087","2021-05-21 00:03:26.653406759","2021-05-21 00:03:26.798154350"]))
delta = (s1-s2).astype(np.int64)
delta
0 4107
1 4886
2 4141
3 3310
4 3016
dtype: int64
注意:我在这里使用 numpy 的 int64 类型,因为在某些系统上,内置的 int
将产生 32 位整数,即转换失败。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。