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

cs_*_*bie 41 python datetime numpy date

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

t = numpy.datetime64('2012-06-30T20:00:00.000000000-0400')
Run Code Online (Sandbox Code Playgroud)

成:

'2012.07.01' as a  string. (note time difference)
Run Code Online (Sandbox Code Playgroud)

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

dt = t.astype(datetime.datetime) #1341100800000000000L
time.ctime(dt)
ValueError: unconvertible time
Run Code Online (Sandbox Code Playgroud)

cs_*_*bie 57

解决方案是:

import pandas as pd 
ts = pd.to_datetime(str(date)) 
d = ts.strftime('%Y.%m.%d')
Run Code Online (Sandbox Code Playgroud)

  • 由于某种原因,这不起作用。numpy.datetime64' 对象没有属性 'strftime' (2认同)
  • @chemeng 你需要在执行 `.strftime` 之前在 `numpy.datetime64` 对象上运行 `pd.to_datetime` (2认同)

cit*_*man 32

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

str(t)[:10]
Out[11]: '2012-07-01'
Run Code Online (Sandbox Code Playgroud)

  • 那是疯狂!多么有创意的解决方案! (2认同)

Jul*_*lie 23

您可以使用 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'
Run Code Online (Sandbox Code Playgroud)


bru*_*off 10

t.item().strftime('%Y.%m.%d')

.item()将投射numpy.datetime64datetime.datetime,无需导入任何内容。

  • 这有点令人困惑,因为 `datetime64[ns]` 项返回自 1970 年以来以纳秒为单位的整数。一个修复是 `t.astype('datetime64[s]').item().strftime()` (4认同)

Wir*_*nto 5

有一条路线不使用pandas;但请参阅下面的警告。

好吧,该t变量的分辨率为纳秒,可以通过在 python 中检查来显示:

>>> numpy.dtype(t)
dtype('<M8[ns]')
Run Code Online (Sandbox Code Playgroud)

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

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

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

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 <= 1.10 中,datetime64 在内部存储为 UTC,并打印为本地时间。如果未指定 TZ,则解析假定本地时间,否则会考虑时区偏移。

  • 在 numpy >= 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