Я пытаюсь взять минимум и максимум пары объектов серии Pandas, содержащих данные datetime64, в лице NaT. np.minimum и np.maximum работают так, как я хочу, если dtype равен float64. То есть, если какой-либо элемент сравнения представляет собой NaN, NaN будет результатом этого сравнения. Например:
>>> s1
0 0.0
1 1.8
2 3.6
3 5.4
dtype: float64
>>> s2
0 10.0
1 17.0
2 NaN
3 14.0
dtype: float64
>>> np.maximum(s1, s2)
0 10.0
1 17.0
2 NaN
3 14.0
dtype: float64
>>> np.minimum(s1, s2)
0 0.0
1 1.8
2 NaN
3 5.4
dtype: float64
Это не работает, если s1 и s2 являются объектами datetime64:
>>> s1
0 2199-12-31
1 2199-12-31
2 2199-12-31
3 2199-12-31
dtype: datetime64[ns]
>>> s2
0 NaT
1 2018-10-30
2 NaT
3 NaT
dtype: datetime64[ns]
>>> np.maximum(s1, s2)
0 2199-12-31
1 2199-12-31
2 2199-12-31
3 2199-12-31
dtype: datetime64[ns]
>>> np.minimum(s1, s2)
0 2199-12-31
1 2018-10-30
2 2199-12-31
3 2199-12-31
dtype: datetime64[ns]
Я ожидал, что индексы 0, 2 и 3 повысятся как NaT, независимо от того, вычисляется ли мин или макс. (Я понимаю, что функции numpy, возможно, были не лучшим выбором, но мне не удалось найти подходящие аналоги Pandas.)
После небольшого чтения я пришел к выводу, что NaT - это всего лишь приблизительно NaN, последний имеет правильное представление с плавающей запятой. Дальнейшее чтение не предложило простого способа, чтобы NaT «загрязнил» эти сравнения. Как правильно распространять NaT в сравнениях мин / макс, как NaN в контексте с плавающей запятой? Может быть, есть эквиваленты Pandas для numpy. {Максимум, минимум}, которые знают NaT?