
正如你在附图中看到的,datetime对象是"numpy.datetime64('2019-11-01T08:17:10.000000000’)”,如果你将它转换为float,它将被转换为‘1.57259623e+18’,这看起来与原始的datetime对象并不相似。
发布于 2020-05-22 02:38:10
它是纳秒(1e9纳秒在一秒
>>> val = numpy.datetime64('2019-11-01T08:17:10.000000000').astype(float)
>>> datetime.datetime.fromtimestamp(val/1e9)
datetime.datetime(2019, 11, 1, 1, 17, 10)(虽然我不确定为什么它比原来的时间有7个小时的偏差…很可能和UTC有关...或者可能是夏令时?)
是UTC
>>> datetime.datetime.utcfromtimestamp(val/1e9)
datetime.datetime(2019, 11, 1, 8, 17, 10)发布于 2020-05-22 02:31:15
这是一个时间戳,它是自纪元(一个固定的、任意的时间点)以来的秒数。为datetime和许多其他应用程序选择的纪元是1970年1月1日。
发布于 2020-05-22 04:48:36
In [563]: arr = np.array('2019-11-01T09:17:10', 'datetime64[us]')
In [567]: arr
Out[567]: array('2019-11-01T09:17:10.000000', dtype='datetime64[us]')tolist或item会生成一个datatime对象:
In [568]: arr.item()
Out[568]: datetime.datetime(2019, 11, 1, 9, 17, 10)将元素从数组包装器中取出:
In [569]: arr[()]
Out[569]: numpy.datetime64('2019-11-01T09:17:10.000000')我的numpy版本拒绝使用float
In [570]: float(arr[()])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-570-4e2ece106714> in <module>
----> 1 float(arr[()])
TypeError: float() argument must be a string or a number, not 'datetime.datetime'astype(float)确实可以工作:
In [571]: arr.astype(float)
Out[571]: array(1.57259983e+15)但是如果我首先转换时间单位:
In [572]: arr.astype('datetime64[m]')
Out[572]: array('2019-11-01T09:17', dtype='datetime64[m]')
In [574]: arr.astype('datetime64[m]').astype(float)
Out[574]: array(26209997.)
In [575]: arr.astype('datetime64[D]')
Out[575]: array('2019-11-01', dtype='datetime64[D]')
In [577]: arr.astype('datetime64[D]').astype(int)
Out[577]: array(18201)
In [580]: arr.astype('datetime64[Y]')
Out[580]: array('2019', dtype='datetime64[Y]')
In [581]: arr.astype('datetime64[Y]').astype(int)
Out[581]: array(49)https://stackoverflow.com/questions/61941276
复制相似问题