Как отфильтровать данные из набора данных, имеющего разные типы данных в заданном столбце, используя pandas?

#python #pandas

#python #pandas

Вопрос:

У меня есть большой набор данных, в котором одним из атрибутов (столбца) является «Возраст». Я хочу получить все строки, которые имеют значение больше 20 в столбце Age. Есть несколько строк с NaN в качестве значения столбца row. Я попробовал следующую команду в pandas

 df.loc(df['Age'>20])
  

Я получаю ошибку: TypeError: ‘>’ не поддерживается между экземплярами ‘str’ и ‘int’.
Я решил проблему, заменив все NaN нулями

 df.replace(np.nan, 0, inplace=True)
  

Я хочу знать, подходит ли это и существуют ли другие методы для фильтрации этого набора данных.

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

1. Прямо сейчас вы сравниваете строку 'Age' с 20 . У вас много опечаток с вашими скобками. Вероятно, это должно гласить: df.loc[df['Age'] > 20] . Т.е. сравнение представляет собой ряд со значением df['Age'] > 20 , а затем вы используете это для фрагментации фрейма данных df.loc[that_boolean_Series]

Ответ №1:

Вы могли бы создать флаг и использовать этот флаг для обработки логики, когда она более сложная.

 
flag = [False if i == np.nan or i <=20 else True for i in df['Age']]
filtered_result = df[flag]

  

Я лично предпочел бы создать функцию для работы с более сложными случаями:

 def flag(row):
    result = [False if i == np.nan or i <=20 else True for i in row]
    return result

filtered_result = df[flag(df['Age'])]