Ошибка при заполнении пустого массива Numpy объектами `np.datetime64` - PullRequest
1 голос
/ 30 мая 2019

Меня всегда смущало взаимодействие между стандартной библиотекой Python datetime объектами и объектами Numpy datetime. Следующий код выдает ошибку, которая сбивает меня с толку.

from datetime import datetime
import numpy as np

b = np.empty((1,), dtype=np.datetime64)
now = datetime.now()
b[0] = np.datetime64(now)

Это дает следующую ошибку:

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

Что я здесь не так делаю?

1 Ответ

3 голосов
/ 30 мая 2019

np.datetime64 - это класс, тогда как np.dtype('datetime64[us]') - это тип NumPy:

import numpy as np
print(type(np.datetime64))
# <class 'type'>

print(type(np.dtype('datetime64[us]')))
# <class 'numpy.dtype'>

Укажите dtype для b, используя тип dum NumPy, а не класс:

from datetime import datetime
import numpy as np

b = np.empty((1,), dtype='datetime64[us]')  
# b = np.empty((1,), dtype=np.dtype('datetime64[us]'))  # also works
now = datetime.now()
b[0] = np.datetime64(now)
print(b)
# ['2019-05-30T08:55:43.111008']

Обратите внимание, что datetime64[us] это только один из множества возможных dtypes. За Например, есть datetime64[ns], datetime64[ms], datetime64[s], datetime64[D], datetime64[Y] dtypes, в зависимости от желаемого времени разрешение.

datetime.dateitem.now() возвращает дату и время с микросекундным разрешением, поэтому я выбрал datetime64[us] для соответствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...