如何以纳秒为单位计算两个 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 位整数,即转换失败。
我有两个系列,它们是 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 位整数,即转换失败。