从numpy.timedelta64获取相差秒数
如何从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 的回答。