Подтвердить что ты не робот

Как фильтровать в NaN (pandas)?

У меня есть pandas dataframe (df), и я хочу сделать что-то вроде:

newdf = df[(df.var1 == 'a') & (df.var2 == NaN)]

Я попытался заменить NaN на np.NaN или 'NaN' или 'NaN' и т.д., но ничто не оценивает значение True. Там нет pd.NaN.

Я могу использовать df.fillna(np.nan), прежде чем оценивать вышеприведенное выражение, но это кажется хакерским, и мне интересно, вмешивается ли он в другие операции pandas, которые полагаются на возможность идентифицировать pandas -формат NaN позже.

У меня возникает ощущение, что должен быть легкий ответ на этот вопрос, но почему-то это ускользнуло от меня. Любые советы приветствуются. Спасибо.

4b9b3361

Ответ 1

Это не работает, потому что NaN не равно никому, включая NaN. Вместо этого используйте pd.isnull(df.var2).

Ответ 2

Pandas использует значение numpy NaN. Используйте numpy.isnan для получения булева вектора из серии pandas.

Ответ 3

Самый простой из всех решений:

filtered_df = df[df['var2'].isnull()]

Этот фильтр и дает вам строки, которые имеют только значения NaN в столбце "var2".