【问题标题】:Numpy converting date object to datetime64[s] in newer versionNumpy 在较新版本中将日期对象转换为 datetime64[s]
【发布时间】:2017-04-16 16:08:36
【问题描述】:

为什么 numpy 在较新的版本中开始将日期对象转换为 datetime64[s] 类型的对象?如何使其向后兼容?

例子:

代码 sn-p

import datetime
import numpy as np

dt = datetime.date(1970, 1, 1)

array = np.array([dt], dtype='datetime64[s]')

array

结果

**Numpy version 1.12.0**

array(['1970-01-01T00:00:00'], dtype='datetime64[s]')

**Numpy version 1.9.3**

TypeError: Cannot cast datetime.date object from metadata [D] to [s] according to the rule 'same_kind'

【问题讨论】:

标签: python datetime numpy


【解决方案1】:

尝试“D”中间体:

In [27]: np.array([dt],'datetime64[D]')
Out[27]: array(['1970-01-01'], dtype='datetime64[D]')
In [28]: np.array([dt],'datetime64[D]').astype('datetime64[s]')
Out[28]: array(['1970-01-01T00:00:00'], dtype='datetime64[s]')

虽然在我的版本中,直接创建有效:

In [29]: np.array([dt],'datetime64[s]')
Out[29]: array(['1970-01-01T00:00:00'], dtype='datetime64[s]')
In [30]: np.__version__
Out[30]: '1.12.0'
In [31]: dt
Out[31]: datetime.date(1970, 1, 1)

【讨论】:

  • 谢谢。这行得通。但是那我怎么才能发现 dt 的实际单位是 'D' 而不是 's' 呢?
  • 另外,它也适用于我的新版本。但我想检查 dt 是否兼容 datetime64[D] 或 datetime64[s] ?像 datetime.date(1970, 1, 1) 与 datetime64[D] 类型兼容,但 datetime.datetime(1970, 1, 1, 10, 30) 与 datetime64[s] 类型兼容。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2023-03-09
  • 2019-07-23
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多