如何以纳秒为单位计算两个 pandas.Timestamp 系列之间的差异

How to calculate differences between two pandas.Timestamp Series in nanoseconds

我有两个系列,它们是 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,您将不会失去精度。内部表示总是纳秒。计算出时间增量后,可以转换为整数以获得以纳秒为单位的差异。例如:

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 位整数,即转换失败。