numpy.timedelta64的时差(秒)

sas*_*llo 39 python datetime numpy

如何从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
Run Code Online (Sandbox Code Playgroud)

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

jfs*_*jfs 67

numpy.timedelta64()使用numpy1.7实验日期时间API从对象获取秒数:

seconds = dt / np.timedelta64(1, 's')
Run Code Online (Sandbox Code Playgroud)

  • 对于熊猫系列,请使用`series.apply(lambda x:x/timedelta64(1,'s'))`(**NumPy 1.7.1**,**pandas 0.12.0**) (13认同)
  • 将相同逻辑应用于系列的另一种方法:`np.divide(mySeries,np.timedelta64(1,'s'))`比上面的apply方法快70倍 (10认同)
  • @wim:是的.[1.6和1.7 API不同](http://docs.scipy.org/doc/numpy-dev/reference/arrays.datetime.html#datetime-and-timedelta-arithmetic). (4认同)

wim*_*wim 30

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

>>> dt.item().total_seconds()
65.0
Run Code Online (Sandbox Code Playgroud)

说明:这里dt是一个阵列的标量numpy,这是一个零等级阵列或0维阵列.所以你会发现dt这里也有ndarray拥有的所有方法,你可以这样做dt.astype('float').但是它包装了一个python对象,在这种情况下是一个datetime.timedelta对象.

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

>>> dt[()]
array(datetime.timedelta(0, 65), dtype='timedelta64[s]')
Run Code Online (Sandbox Code Playgroud)

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

  • 它的`datetime.timedelta`有一个名为的属性,而不是`numpy.timedelta64`.我不知道为什么numpy会像那样实现它,也许其他人可以回答.. (4认同)
  • 值得注意的是:如果“timedelta64”对象的数据类型为“timedelta64[ns]”,则这不起作用,您需要先转换为“timedelta64[s]”(即“dt.astype('timedelta64[s]'”)。 item().total_seconds()`)。我已经被这个咬过很多次了 (2认同)

小智 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)
Run Code Online (Sandbox Code Playgroud)

  • `timedelta.astype('timedelta64[s]')` 对我来说似乎截断了毫秒精度 `` [147] elapsed_time.iloc[0] Timedelta('0 days 00:00:00.005322600') [148] elapsed_time.iloc[ 0]/ np.timedelta64(1, 's') 0.0053226 [149] elapsed_time.astype('timedelta64[s]').astype(np.float64).iloc[0] 0.0 `` (2认同)