从numpy.timedelta64获取相差秒数

60 投票
3 回答
89830 浏览
提问于 2025-04-17 16:09

如何从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转换成一个数字(整数或浮点数),这个数字表示时间差的秒数。

3 个回答

8

你可以简单地使用 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)
102

要从 numpy.timedelta64() 对象中获取秒数,可以使用 numpy 1.7 版本的实验性日期时间API

seconds = dt / np.timedelta64(1, 's')
48

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

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

解释:这里的 dt 是一个在 numpy 中的 数组标量,也就是一个零维数组。你会发现 dt 也有所有 ndarray 拥有的方法,比如你可以使用 dt.astype('float')。不过它实际上是包装了一个 Python 对象,在这个例子中是一个 datetime.timedelta 对象。

要获取原始的标量值,你可以使用 dt.item()。如果你想索引这个数组标量,可以使用一种有点奇怪的语法,通过一个空的元组来获取:

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

这个方法在所有版本的 numpy 中都应该能用,但如果你使用的是 numpy v1.7 及以上版本,直接使用更新的 numpy 日期时间 API 可能会更好,具体可以参考 J.F. Sebastien 的回答。

撰写回答