Не удается вызвать strftime на numpy.datetime64, нет определения

У меня есть datetime64 t, который я хотел бы представить в виде строки.

Когда я вызываю strftime как this t.strftime('%Y.%m.%d'), я получаю эту ошибку:

AttributeError: 'numpy.datetime64' object has no attribute 'strftime'

Что мне не хватает? Я использую Python 3.4.2 и Numpy 1.9.1

Ответ 1

Используйте этот код:

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

Ответ 2

Импорт библиотеки структур данных, такой как pandas для преобразования типов, кажется мне излишним. Вы можете достичь того же уровня со стандартным модулем datetime:

import numpy as np
import datetime
t = np.datetime64('2017-10-26')
t = t.astype(datetime.datetime)
timestring = t.strftime('%Y.%m.%d')

Ответ 3

Это самый простой способ:

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

item() предоставляет вам собственный объект datetime Python, для которого доступны все обычные методы.

Ответ 4

Если ваша цель состоит только в том, чтобы представить t в виде строки, самое простое решение - str(t). Если вы хотите использовать его в определенном формате, используйте одно из приведенных выше решений.

Одно предостережение в том, что np.datetime64 может иметь разную степень точности. Если t имеет точность до наносекунды, решение пользователя 12321 будет по-прежнему работать, а решения apteryx и John Zwinck - нет, потому что t.astype(datetime.datetime) и t.item() возвращают int:

import numpy as np

print('second precision')
t = np.datetime64('2000-01-01 00:00:00') 
print(t)
print(t.astype(datetime.datetime))
print(t.item())

print('microsecond precision')
t = np.datetime64('2000-01-01 00:00:00.0000') 
print(t)
print(t.astype(datetime.datetime))
print(t.item())

print('nanosecond precision')
t = np.datetime64('2000-01-01 00:00:00.0000000') 
print(t)
print(t.astype(datetime.datetime))
print(t.item())
import pandas as pd 
print(pd.to_datetime(str(t)))


second precision
2000-01-01T00:00:00
2000-01-01 00:00:00
2000-01-01 00:00:00
microsecond precision
2000-01-01T00:00:00.000000
2000-01-01 00:00:00
2000-01-01 00:00:00
nanosecond precision
2000-01-01T00:00:00.000000000
946684800000000000
946684800000000000
2000-01-01 00:00:00

Ответ 5

Для тех, кто может наткнуться на это: numpy теперь имеет функцию numpy.datetime_as_string. Единственное предостережение в том, что он принимает массив, а не только отдельное значение. Однако я мог бы сделать вывод, что это все же лучшее решение, чем использование другой библиотеки для преобразования.