#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'])]