我如何从numpy datetime64中获取年月日?

max*_*oku 4 python datetime numpy

我的日期时间很短。

numpy.datetime64('2010-06-01T00:00:00.000000000')
Run Code Online (Sandbox Code Playgroud)

我如何得到类似的东西:

numpy.datetime64('2010-06-01')
Run Code Online (Sandbox Code Playgroud)

要么

'2010-06-01'
Run Code Online (Sandbox Code Playgroud)

基本上,我想删除小时和时间戳以外的内容。

hpa*_*ulj 9

astype 作品:

In [208]: d1 = numpy.datetime64('2010-06-01T00:00:00.000000000')
In [210]: d1.astype('datetime64[D]')
Out[210]: numpy.datetime64('2010-06-01')
Run Code Online (Sandbox Code Playgroud)

对于打印字符串:

In [211]: str(d1.astype('datetime64[D]'))
Out[211]: '2010-06-01'
Run Code Online (Sandbox Code Playgroud)

或编辑完整的字符串

In [216]: str(d1)
Out[216]: '2010-06-01T00:00:00.000000000'
In [217]: str(d1).split('T')[0]
Out[217]: '2010-06-01'
Run Code Online (Sandbox Code Playgroud)

(之前的想法)

如果从数组中取出日期,则会得到一个datetime对象。您可以获得日期等属性:

In [198]: d=np.array('2018-03-12',dtype='datetime64[D]')
In [199]: d
Out[199]: array('2018-03-12', dtype='datetime64[D]')
In [200]: d.item()
Out[200]: datetime.date(2018, 3, 12)
In [201]: dd=d.item()
In [202]: dd.day
Out[202]: 12
In [203]: dd.month
Out[203]: 3
In [204]: dd.year
Out[204]: 2018
Run Code Online (Sandbox Code Playgroud)

简单地索引数组是不够的:

In [205]: d[()]
Out[205]: numpy.datetime64('2018-03-12')
In [206]: d[()].item()
Out[206]: datetime.date(2018, 3, 12)
Run Code Online (Sandbox Code Playgroud)

从建议的重复链接,转换为objectdtype 也会创建datetime对象:

In [207]: d.astype(object)
Out[207]: array(datetime.date(2018, 3, 12), dtype=object)
Run Code Online (Sandbox Code Playgroud)

对于具有微秒的较长对象, item 没有那么有用

In [213]: d1.item()
Out[213]: 1275350400000000000
In [214]: d1.astype('datetime64[s]').item()
Out[214]: datetime.datetime(2010, 6, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)


sac*_*cuL 6

我建议使用pandas来转换您的numpy.datetime

import pandas as pd
import numpy as np

x = np.datetime64('2010-06-01T00:00:00.000000000')
x = pd.to_datetime(x)

str(x.date())
Run Code Online (Sandbox Code Playgroud)

返回:

'2010-06-01'
Run Code Online (Sandbox Code Playgroud)

如果您要转换多个字符串,这也可以工作:

x = [np.datetime64(i) for i in ['2010-06-01T00:00:00.000000000', '2010-12-02T00:00:00.000000000']]

x = pd.to_datetime(x)

[str(i.date()) for i in x]
Run Code Online (Sandbox Code Playgroud)

返回:

['2010-06-01', '2010-12-02']
Run Code Online (Sandbox Code Playgroud)