首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将date-time对象强制转换为float时会发生什么

将date-time对象强制转换为float时会发生什么
EN

Stack Overflow用户
提问于 2020-05-22 02:25:13
回答 3查看 84关注 0票数 1

正如你在附图中看到的,datetime对象是"numpy.datetime64('2019-11-01T08:17:10.000000000’)”,如果你将它转换为float,它将被转换为‘1.57259623e+18’,这看起来与原始的datetime对象并不相似。

EN

回答 3

Stack Overflow用户

发布于 2020-05-22 02:38:10

它是纳秒(1e9纳秒在一秒

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> datetime.datetime.utcfromtimestamp(val/1e9)
datetime.datetime(2019, 11, 1, 8, 17, 10)
票数 3
EN

Stack Overflow用户

发布于 2020-05-22 02:31:15

这是一个时间戳,它是自纪元(一个固定的、任意的时间点)以来的秒数。为datetime和许多其他应用程序选择的纪元是1970年1月1日。

票数 1
EN

Stack Overflow用户

发布于 2020-05-22 04:48:36

代码语言:javascript
复制
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]')

tolistitem会生成一个datatime对象:

代码语言:javascript
复制
In [568]: arr.item()                                                                     
Out[568]: datetime.datetime(2019, 11, 1, 9, 17, 10)

将元素从数组包装器中取出:

代码语言:javascript
复制
In [569]: arr[()]                                                                        
Out[569]: numpy.datetime64('2019-11-01T09:17:10.000000')

我的numpy版本拒绝使用float

代码语言:javascript
复制
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)确实可以工作:

代码语言:javascript
复制
In [571]: arr.astype(float)                                                              
Out[571]: array(1.57259983e+15)

但是如果我首先转换时间单位:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61941276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档