Как преобразовать numpy datetime64 в datetime

В основном я сталкиваюсь с той же проблемой, что и здесь: Преобразование между datetime, Timestamp и datetime64

но я не смог найти удовлетворительного ответа от него, мой вопрос, как извлечь datetime из типа numpy.datetime64:

если я попробую:

np.datetime64('2012-06-18T02:00:05.453000000-0400').astype(datetime.datetime)

это дало мне:    1339999205453000000L

мое текущее решение конвертирует datetime64 в строку, а затем снова возвращается к дате. но это кажется довольно глупым методом.

2 ответа

Обратите внимание, что Timestamp является подклассом datetime.datetime, поэтому [4] обычно работает

In [4]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400'))
Out[4]: Timestamp('2012-06-18 06:00:05.453000')
In [5]: pd.Timestamp(np.datetime64('2012-06-18T02:00:05.453000000-0400')).to_pydatetime()
Out[5]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)


Заимствование из Преобразование между datetime, Timestamp и datetime64

In [220]: x
Out[220]: numpy.datetime64('2012-06-17T23:00:05.453000000-0700')
In [221]: datetime.datetime.utcfromtimestamp(x.tolist()/1e9)
Out[221]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)

Учет временных зон Я думаю, что правильно. Выглядит довольно неуклюже, хотя.

astype('O') is better (I think) than ToList()) `:

In [294]: datetime.datetime.utcfromtimestamp(x.astype('O')/1e9)
Out[294]: datetime.datetime(2012, 6, 18, 6, 0, 5, 452999)

или получить дату-время в локальном режиме:

In [295]: datetime.datetime.fromtimestamp(x.astype('O')/1e9)

Но в файле test_datatime.py https://github.com/numpy/numpy/blob/master/numpy/core/tests/test_datetime.py

Я нахожу некоторые другие опции - сначала преобразуйте общий datetime64 в один из форматов, который указывает единицы:

In [296]: x.astype('M8[D]').astype('O')
Out[296]: datetime.date(2012, 6, 18)
In [297]: x.astype('M8[ms]').astype('O')
Out[297]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)

Это работает для массивов:

In [303]: np.array([[x,x],[x,x]],dtype='M8[ms]').astype('O')[0,1]
Out[303]: datetime.datetime(2012, 6, 18, 6, 0, 5, 453000)

licensed under cc by-sa 3.0 with attribution.