Как удалить строки из фрейма данных pandas на основе условного выражения
у меня есть фрейм данных pandas, и я хочу удалить строки из него, где длина строки в определенном столбце больше 2. Я знаю, что могу использовать df.dropna() чтобы избавиться от строк, которые содержат какие-либо NaN, но я не вижу как удалить строки на основе условного выражения.
ответ на этот вопрос кажется очень близко к тому, что я хочу ... кажется, я должен быть в состоянии сделать что-то вроде этого:
df[(len(df['column name']) < 2)]
но я просто получить ошибка:
KeyError: u'no item named False'
может кто-нибудь сказать мне, что я делаю неправильно?
3 ответов:
когда вы
len(df['column name'])вы просто получаете одно число, а именно количество строк в фрейме данных (т. е. длину самого столбца). Если вы хотите применитьlenдля каждого элемента в столбце, используйтеdf['column name'].map(len). Так что попробуйтеdf[df['column name'].map(len) < 2]
чтобы напрямую ответить на заголовок этого вопроса (который, как я понимаю, не обязательно является проблемой OP, но может помочь другим пользователям, столкнувшимся с этим вопросом), один из способов сделать это-использовать drop способ:
df = df.drop(some labels)
df = df.drop(df[<some boolean condition>].index)пример
чтобы удалить все строки, где столбец "оценка"
df = df.drop(df[df.score < 50].index)на месте версии (как указано в комментарии)
df.drop(df[df.score < 50].index, inplace=True)несколько условий
(см. Логическое Индексации)
операторы:
|наor,&наandи~наnot. Они должны быть сгруппированы с помощью круглых скобок.чтобы удалить все строки, где столбец "оценка" 20
df = df.drop(df[(df.score < 50) & (df.score > 20)].index)
Я искал решение для этого, и я наткнулся на очевидный подход, который заключается в том, чтобы просто отфильтровать фрейм данных и назначить обратно в исходный фрейм данных так
df = df[df["score"] > 50]
Comments