在nthon中将numpy.datetime64转换为字符串对象

时间:2013-10-21 18:58:42

标签: python date datetime numpy

我无法将python datetime64对象转换为字符串。例如:

t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400')

分为:

'2012.07.01' as a  string. (note time difference)

我已经尝试将datetime64对象转换为datetime长然后转换为字符串,但我似乎得到了这个错误:

dt = t.astype(datetime.datetime) #1341100800000000000L
time.ctime(dt)
ValueError: unconvertible time

6 个答案:

答案 0 :(得分:51)

解决方案是:

import pandas as pd 
ts = pd.to_datetime(str(date)) 
d = ts.strftime('%Y.%m.%d')

答案 1 :(得分:21)

如果您不想进行转换gobbledygook并且只使用一种日期格式,那么这对我来说是最好的解决方案

UICollectionView

答案 2 :(得分:5)

您可以使用Numpy的datetime_as_string函数。 unit='D'参数指定精度,在这种情况下为天。

 >>> t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400')
 >>> numpy.datetime_as_string(t, unit='D')
'2012-07-01'

答案 3 :(得分:3)

我想要一个ISO 8601格式的字符串,而不需要任何额外的依赖项。我的numpy_array有一个元素作为datetime64。在@ Wirawan-Purwanto的帮助下,我补充了一点:

from datetime import datetime   

ts = numpy_array.values.astype(datetime)/1000000000
return datetime.utcfromtimestamp(ts).isoformat() # "2018-05-24T19:54:48"

答案 4 :(得分:2)

有一条没有使用熊猫的路线;但请参阅下面的警告。

嗯,t变量的分辨率为纳秒,可以通过python中的检查显示:

>>> numpy.dtype(t)
dtype('<M8[ns]')

这意味着此值的整数值是UNIX时间戳的10 ^ 9倍。问题中打印的值给出了提示。您最好的选择是将t的积分值除以10亿,然后您可以使用time.strftime

>>> import time
>>> time.strftime("%Y.%m.%d", time.gmtime(t.astype(int)/1000000000))
2012.07.01

在使用它时,要注意两个假设:

1)datetime64分辨率为纳秒

2)datetime64中存储的时间是UTC

附注1 :有趣的是,numpy开发人员决定[1]将datetime64分辨率大于微秒的对象强制转换为long类型,解释了为什么t.astype(datetime.datetime)会产生1341100800000000000L。原因是datetime.datetime对象无法准确表示纳秒级或更精细的时间刻度,因为datetime.datetime支持的分辨率仅为微秒。

附注2 :注意numpy 1.10和早期版本与1.11及更高版本之间的不同约定:

  • 在numpy&lt; = 1.10中,datetime64在内部存储为UTC,并打印为本地时间。如果没有指定TZ,则解析假定为本地时间,否则将考虑时区偏移。

  • 在numpy&gt; = 1.11中,datetime64在内部存储为时区不可知值(自未指定时区的1970-01-01 00:00以来的秒数),并按原样打印。时间解析不假设时区,但仍允许+NNNN样式时区转换,并且该值转换为UTC。

[1]:https://github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/datetime.c参见例行程序convert_datetime_to_pyobject

答案 5 :(得分:0)

this answer为基础,我将执行以下操作:

import numpy
import datetime
t = numpy.datetime64('2012-06-30T20:00:00.000000000')
datetime.datetime.fromtimestamp(t.item() / 10**9).strftime('%Y.%m.%d')

十亿分之一是将纳秒转换为秒。