Ваш arange
без dtype
вызывает ошибку:
In [91]: x = np.arange(np.datetime64("2020-03-24"), np.datetime64("2020-06-24"),
...: np.timedelta64(1, 'M'))
...
TypeError: Cannot get a common metadata divisor for NumPy datetime metadata [M] and [D] because they have incompatible nonlinear base time units
Шаг за один месяц - это не то же самое, что шаг за n дней.
С dtype:
In [85]: x = np.arange(np.datetime64("2020-03-24"), np.datetime64("2020-06-24"),
...: np.timedelta64(1, 'M'),
...: dtype='datetime64[M]')
In [86]: x
Out[86]: array(['2020-03', '2020-04', '2020-05'], dtype='datetime64[M]')
Конечные точки были преобразованы в месяц (без какой-либо подразумеваемой даты).
Обратите внимание, что различия ожидаются 1 month
:
In [87]: np.diff(x)
Out[87]: array([1, 1], dtype='timedelta64[M]')
Если я преобразую даты в D
dtype, он выберет начало месяца:
In [89]: x.astype('datetime64[D]')
Out[89]: array(['2020-03-01', '2020-04-01', '2020-05-01'], dtype='datetime64[D]')
Дельта времени даты больше не является равномерной:
In [90]: np.diff(x.astype('datetime64[D]'))
Out[90]: array([31, 30], dtype='timedelta64[D]')
===
Вместо astype
вы можете добавить соответствующую временную дельту:
In [96]: x + np.array(3, 'timedelta64[D]')
Out[96]: array(['2020-03-04', '2020-04-04', '2020-05-04'], dtype='datetime64[D]')