52

如何从 numpy.timedelta64 变量中获取以秒为单位的时差?

time1 = '2012-10-05 04:45:18'
time2 = '2012-10-05 04:44:13'
dt = np.datetime64(time1) - np.datetime64(time2)
print dt

0:01:05

我想转换dt为以秒为单位表示时差的数字(int 或 float)。

4

3 回答 3

92

要使用1.7 实验性日期时间 APInumpy.timedelta64()从对象获取秒数:numpy

seconds = dt / np.timedelta64(1, 's')
于 2013-02-17T12:39:20.757 回答
41

您可以通过“包装的”日期时间项访问它:

>>> dt.item().total_seconds()
65.0

解释:这里dt是一个数组标量in numpy,它是一个零秩数组或 0 维数组。所以你会发现dt这里也有 ndarray 拥有的所有方法,你可以做例如dt.astype('float'). 但它包装了一个 python 对象,在本例中是一个datetime.timedelta对象。

要获得原始标量,您可以使用dt.item(). 要索引数组标量,您可以使用 getitem 的有点奇怪的语法,使用一个空元组:

>>> dt[()]
array(datetime.timedelta(0, 65), dtype='timedelta64[s]')

这应该适用于所有版本的 numpy,但如果您使用的是 numpy v1.7+,最好直接使用更新的 numpy datetime API,如JF Sebastien的回答中所述。

于 2013-02-17T12:09:25.473 回答
4

您可以使用 np.astype 简单地将值转换为所需的时间单位,如示例所示:

timedelta = np.datetime64('2011-07-18')-np.datetime64('2011-07-16')
seconds = timedelta.astype('timedelta64[s]').astype(np.int32)
hours = timedelta.astype('timedelta64[h]').astype(np.int32)
于 2021-01-05T18:06:10.157 回答