Numpy奇怪的行为转换为datetime64 dtype

时间:2012-03-14 20:31:58

标签: python datetime numpy

import numpy
a = numpy.array([20090913, 20101020, 20110125])

你能解释为什么numpy.datetime64(a.astype("S8").tolist())正确转换而不是numpy.datetime64(a.astype("S8"))?为什么numpy函数不接受numpy字符串而只接受常规python字符串?我正在使用Numpy 1.6.1和Python 2.7.2 Windows 7。

1 个答案:

答案 0 :(得分:4)

重现结果:

>>> a = numpy.array([20090913, 20101020, 20110125])

>>> numpy.datetime64(a.astype("S8").tolist())
array([2009-09-13 00:00:00, 2010-10-20 00:00:00, 2011-01-25 00:00:00], dtype=datetime64[us])

>>> numpy.datetime64(a.astype("S8"))
array([1970-01-01 00:00:20.090913, 1970-01-01 00:00:20.101020,
       1970-01-01 00:00:20.110125], dtype=datetime64[us])

这是关键:

>>> a.astype("S8").tolist()
['20090913', '20101020', '20110125']
>>> a.astype("S8")
array(['20090913', '20101020', '20110125'],
      dtype='|S8')

在第一种情况下,字符串参数传递给numpy.datetime64并正确解析,正如您所描述的那样。在第二种情况下,它需要从|S8进行明确的强制推测。事实证明这正在考虑中,但目前explicitly isn't supported

  

这没有进入,因为日期时间属性不存在   将它们转换为datetime64之后的数组,所以可能有一些   这种不直观的后果。当马丁实施了   四元数dtype,我们讨论了dtypes可能的可能性   公开显示在数组对象上的属性,如果是这样的话   实现我认为python之间的转换和兼容性   datetime和datetime64可以很自然。

The documentation有更多您可能希望考虑的工作强制措施的例子,包括其他numpy时间格式。如果您觉得显式类型强制的需要是错误的,我建议将其报告给numpy团队,如果可能的话,提交自己的补丁。