Существует некоторая двусмысленность в добавлении «месяца» ко времени, так как месяцы различаются по длине.
Создайте дату:
In [247]: a = np.array('1995-12-31','datetime64[D]')
In [248]: a
Out[248]: array('1995-12-31', dtype='datetime64[D]')
добавление дней к этому работает нормально:
In [249]: a + np.array(31, 'timedelta64[D]')
Out[249]: numpy.datetime64('1996-01-31')
При добавлении месяца возникает ошибка:
In [250]: a + np.array(1, 'timedelta64[M]')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-250-a331f724d7e7> in <module>
----> 1 a + np.array(1, 'timedelta64[M]')
TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [D] and [M] because they have incompatible nonlinear base time units
Мы можем разыграть a
как месяц - тогда это работает:
In [251]: a.astype('datetime64[M]')
Out[251]: array('1995-12', dtype='datetime64[M]')
In [252]: a.astype('datetime64[M]') + np.array(1, 'timedelta64[M]')
Out[252]: numpy.datetime64('1996-01')
Изменить месяцв соответствующем datetime
объекте может быть самый чистый способ работы с этим:
In [254]: b = a.item()
In [255]: b
Out[255]: datetime.date(1995, 12, 31)
Я недостаточно поработал с datetime
объектами, чтобы внести изменения, не глядя на его документы.