Как конвертировать в NaT в NaN в Python - PullRequest
2 голосов
/ 22 февраля 2020

У меня есть датафрейм, как показано ниже

df.head(3)

ORD     Date1                   Date2           
717 2020-03-04T00:00:00Z    2020-03-04T00:00:00Z
722 NaT                     2020-03-15T00:00:00Z
719 2020-05-14T00:00:00Z    NaT

Я хочу преобразовать все NaT в NaN

Ожидаемый результат

ORD   Date1                   Date2           
717 2020-03-04T00:00:00Z    2020-03-04T00:00:00Z
722 NaN                     2020-03-15T00:00:00Z
719 2020-05-14T00:00:00Z    NaN

Как можно это будет сделано

1 Ответ

3 голосов
/ 22 февраля 2020

Очевидно, что в pandas нет необходимости, потому что NaT обрабатываются как NaN s.

Это возможно небольшим взломом, но даты и время передаются объектам:

df = df.astype(object).mask(df.isna(), np.nan)
print (df)
   ORD                      Date1                      Date2
0  717  2020-03-04 00:00:00+00:00  2020-03-04 00:00:00+00:00
1  722                        NaN  2020-03-15 00:00:00+00:00
2  719  2020-05-14 00:00:00+00:00                        NaN

print (df.dtypes)
ORD      object
Date1    object
Date2    object
dtype: object

РЕДАКТИРОВАТЬ: Если преобразованные даты и время в строки также пропущены значения NaT являются строками. Поэтому для замены их на NaN s используйте:

df = df.mask(df == 'NaT', np.nan)

Или:

df = df.replace('NaT', np.nan)
...