Фильтр для строк в фрейме данных pandas, где значения в столбце больше x или NaN

#python #pandas #numpy #dataframe

#python #pandas #numpy #фрейм данных

Вопрос:

Я пытаюсь выяснить, как фильтровать фрейм данных pandas так, чтобы значения в определенном столбце были либо больше определенного значения, либо равны NaN. Допустим, мой фрейм данных выглядит следующим образом:

 df = pd.DataFrame({"col1":[1, 2, 3, 4], "col2": [4, 5, np.nan, 7]})
  

Я пробовал:

 df = df[df["col2"] >= 5 | df["col2"] == np.nan]
  

и:

 df = df[df["col2"] >= 5 | np.isnan(df["col2"])]
  

Но первое вызывает ошибку, а второе исключает строки, где значение равно NaN. Как я могу получить такой результат:

 pd.DataFrame({"col1":[2, 3, 4], "col2":[5, np.nan, 7]})
  

Ответ №1:

Пожалуйста, попробуйте

 df[df.col2.isna()|df.col2.gt(4)]



  col1  col2
1     2   5.0
2     3   NaN
3     4   7.0
  

Комментарии:

1. К вашему сведению, для всех остальных, похоже df['col2'] , работает так же, как df.col2

Ответ №2:

Кроме того, вы можете заполнить nan пороговым значением:

 df[df.fillna(5)>=5]