Не удается заполнить массивы numpy datetime64

Я пытаюсь создать массив NumPy, который впоследствии будет заполнен некоторыми значениями datetime. Кажется, у меня ничего не получается.

import numpy as np
t = np.empty(3,dtype='datetime64')
t

Я TypeError: Invalid datetime unit "generic" in metadata.
То же самое, если я попытаюсь:

import numpy as np
t = np.empty(3,dtype='datetime64')
t[0] = np.datetime64('2014-12-12 20:20:20')

Я:

TypeError : Cannot cast numpy timedelta64 scalar from metadata [m] to  according to the rule 'same_kind'

1 ответов


он должен работать, если вы также укажете параметр единицы времени при создании массива. Например:

>>> t = np.empty(3, dtype='datetime64[s]')
>>> t
array(['1970-01-01T00:00:00+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')

и тогда вы можете назначить значения:

>>> t[0] = np.datetime64('2014-12-12 20:20:20')
>>> t
array(['2014-12-12T20:20:20+0000', '1970-01-01T00:00:00+0000',
       '1970-01-01T00:00:00+0000'], dtype='datetime64[s]')

NumPy не позволяет представлять даты с общими единицами (т. е. без единиц). Создание массива t без параметра unit, а затем пытается получить доступ к первому элементу t[0] вызовет ошибку:

ValueError: Cannot convert a NumPy datetime value other than NaT with generic units

здесь NumPy не может определить, какие единицы представление datetime должно иметь. Угадывание может привести к ошибочным значениям, учитывая различные длины календарных месяцев и лет.

этот момент не очень явный в документации, но может быть извлечен из страница datetime и указано в исходном коде здесь.