2015-09-30 3 views
5

У меня есть эта серия:Python панды .isnull() не работает на NaT в объекте DTYPE

ser=pd.Series([11,22,33,np.nan,np.datetime64('nat')],name='my_series') 

серии выглядит следующим образом:

0  11 
1  22 
2  33 
3 NaN 
4 NaN 
Name: my_series, dtype: object 

Но я получаю только один True для NULL значения:

ser.isnull() 

0 False 
1 False 
2 False 
3  True 
4 False 
Name: my_series, dtype: bool 

Является ли это ошибкой или как правильно подсчитать значения NULL в серии pandas? Это не помогает:

ser=ser.replace('NaN',np.nan) 

Спасибо!

+0

Вы создаете серию, в Вашем коде, а? –

+0

делает 'ser.loc [4]' результат 'NaN' или' NaT'? Я думаю, что datetime64 может взаимодействовать с NaN и NaT, но приписывание NaT ряду «объектов» вызывает проблему – vmg

+0

Да. Конечно, это всего лишь пример ... Второй «NaN» был преобразован из «NaT» (??), но во время преобразования могут возникнуть некоторые проблемы. Или, может быть, нет конверсии: 'ser.loc [4]' results 'NaT' – ragesz

ответ

0

Чтобы обойти эту проблему, вы можете также сделать

series.apply(lambda x: str(x) == "nat")

Тогда вы все еще можете использовать np.datetime если вы хотите

+2

Это не работает. 'series.apply (lambda x: str (x) ==" NaT ")' ** работает **. Остерегайтесь чувствительности к регистру при сравнении строк. – C8H10N4O2

+0

^Это правильный ответ – af3ld