Удаление строк, для которых ячейки пусты в Пандах?
У меня большой пакет данных csv pseuodo-patient, который обычно выглядит так.
Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь получить общее количество разрядов больше 100. НО, потому что у одного из столбцов есть еще одно значение в конце, чем все остальные ячейки, последняя ячейка другой столбцы имеют только пустое пространство, которое подсчитывается как элемент в длине набора данных. Я загрузил этот файл csv в базу данных pandas, и я удалил NA, и мой набор данных по-прежнему выглядит следующим образом.
Таким образом, NAs, None и т.д. Не проблема. Это пустая ячейка, которая делает последние два столбца, имеет тип данных «объект», а поскольку у него пустое пространство/пустое пространство, невозможно изменить тип данных «объект» на «int»,
Если бы я мог изменить свой dataframe, чтобы выглядеть так, удалив все строки в наборе данных, для которых есть какие-либо пустые ячейки в любом из столбцов, тогда все мои проблемы исчезнут. Поэтому я хотел бы, чтобы мой набор данных выглядел так:
Я удивлен, что мне так тяжело это делать. Но из того, что я читал о Пандах, документация предполагает, что это НС, и поэтому я могу просто отказаться от них, но я не могу заставить Панды поверить в это вообще.
Я уже загрузил в набор данных и удалил все НС, не так уж и важно.
Примечание. В этом наборе данных имеется гораздо больше трех столбцов. Для этого требуется всего один столбец, чтобы иметь больше возможностей, чем другие столбцы, и проблема на самом деле находится в последней строке файла csv.
Pandas удалить строки по условию
Как выбрать строки из DataFrame на основе значений в некоторых столбцах в пандах? В SQL я бы использовал:
Я попытался посмотреть документацию pandas, но не сразу нашел ответ.
11 ответов
Чтобы выбрать строки, значение столбца которых равно скаляру, some_value , используйте == :
Чтобы выбрать строки, значение столбца которых в итерабельном, some_values , используйте isin :
Объединить несколько условий с & :
Выбрать строки, значение столбца не равно some_value , используйте != :
isin возвращает булевскую серию, поэтому для выбора строк, значение которых не в some_values , отмените булевскую серию используя
Если у вас несколько значений вы хотите включить, поместить их в список (или, в более общем плане, любой итерабельный) и использовать isin :
Примечание, однако, если вы хотите сделать это много раз, более эффективно сначала сделать индекс, а затем использовать df.loc :
или, чтобы включить несколько значений из использования индекса df.index.isin :
(тильда). То есть df.loc[
Если вы пришли сюда, чтобы выбрать строки из фрейма данных, включив те, чье значение столбца НЕ является ни одним из списка значений, вот как перевернуть ответ unutbu для списка значений выше:
(Чтобы не включать одно значение, конечно, вы просто используете обычный оператор не равно, != .)
Подмножество только для тех строк, которые ARE NOT one или three в столбце B :
Более быстрые результаты могут быть достигнуты с помощью numpy.where .
Например, при настройке unubtu –
Вот простой пример
Для выбора только определенных столбцов из нескольких столбцов для заданного значения в pandas:
Я считаю, что синтаксис предыдущих ответов является избыточным и трудно запоминаемым. Пандас представил метод query() в v0.13, и я предпочитаю его. Для вашего вопроса вы можете сделать df.query(‘col == val’)
Вы также можете получить доступ к переменным в среде, добавив @ .
tl; dr
Пример кода
В приведенном выше коде это строка df[df.foo == 222] , которая дает строки на основе значения столбца, 222 в этом case.
Возможны также множественные условия:
Но в этот момент я бы рекомендовал использовать функцию query , так как он менее подробный и дает тот же результат:
Я просто попытался отредактировать это, но я не был зарегистрирован, поэтому не знаю, где мое редактирование. Я пытался включить множественный выбор. Поэтому я думаю, что лучший ответ:
. Для одного значения наиболее простым (читаемым человеком), вероятно, является:
Для списков значений вы также можете использовать:
Если у вас есть несколько критериев, которые вы хотите выбрать, вы можете поместить их в список и использовать ‘isin’:
Я хочу удалить строки при выполнении нескольких условий:
Например, генерируется случайный кадр данных:
один экземпляр таблицы показан ниже:
Я хочу удалить строки на основе следующих условий:
Строка со значением col ‘one’, ‘two’, или ‘three’ больше 0; Значения и столбца ‘four’ меньше 0 следует удалить.
Затем я попытался реализовать следующее:
Однако в результате появляется следующее сообщение об ошибке:
Может ли кто-нибудь помочь мне с удалением на основе нескольких условий?
264852 просмотра
6 ответа
3035 Репутация автора
У меня есть pandas DataFrame, и я хочу удалить из него строки, длина строки которых в конкретном столбце больше 2. Я знаю, что могу использовать, df.dropna() чтобы избавиться от строк, которые содержат какие-либо NaN , но я не вижу, как удалить строки на основе условного выражения.
Ответ на этот вопрос кажется очень близким к тому, что я хочу – похоже, я должен быть в состоянии сделать что-то вроде этого:
но я просто получаю ошибку:
Может кто-нибудь сказать мне, что я делаю не так?
Ответы (6)
94 плюса
162107 Репутация автора
Когда вы это делаете, len(df[‘column name’]) вы просто получаете одно число, а именно количество строк в DataFrame (то есть длину самого столбца). Если вы хотите применить len к каждому элементу в столбце, используйте df[‘column name’].map(len) . Так что постарайтесь
490 плюса
24341 Репутация автора
Чтобы напрямую ответить на заголовок этого вопроса (который, как я понимаю, не обязательно проблема ОП, но может помочь другим пользователям, сталкивающимся с этим вопросом), один из способов сделать это – использовать метод drop :
df = df.drop(some labels)
df = df.drop(df[ ].index)
пример
Чтобы удалить все строки, в которых столбец «Score» df = df.drop(df[df.score
Версия на месте (как указано в комментариях)
Несколько условий
для not . Они должны быть сгруппированы с помощью скобок.
Чтобы удалить все строки, где столбец "Score" 20
df = df.drop(df[(df.score 20)].index)
Автор: User Размещён: 08.12.2014 02:26
54 плюса
935 Репутация автора
Я искал решение для этого, и я наткнулся на очевидный подход, который состоит в том, чтобы просто отфильтровать фрейм данных и присвоить исходный фрейм данных так,
2 плюса
110384 Репутация автора
В pandas вы можете использовать str.len свою границу и использовать логический результат для ее фильтрации.
Автор: Wen-Ben Размещён: 07.11.2018 02:30
1 плюс
16 Репутация автора
Если вы хотите отбросить строки фрейма данных на основе некоторого сложного условия в значении столбца, то запись, как показано выше, может быть сложной. У меня есть следующее простое решение, которое всегда работает. Предположим, что вы хотите удалить столбец с заголовком, поэтому сначала поместите этот столбец в список.
text_data = df [‘name’]. tolist ()
Теперь примените некоторую функцию к каждому элементу списка и поместите его в серию панда:
text_length = pd.Series ([func (t) для t в text_data])
в моем случае я просто пытался получить количество токенов:
text_length = pd.Series ([len (t.split ()) для t в text_data])
Теперь добавьте один дополнительный столбец с вышеуказанными рядами во фрейм данных
df = df.assign (text_length = text_length .values)
Теперь мы можем применить условие к новому столбцу, например:
df = df [df.text_length> 10]
Фильтр нижних / верхних частот для текста с этим выглядит следующим образом:
1481 Репутация автора
Я остановлюсь на общем решении @ User, чтобы предоставить drop бесплатную альтернативу. Это для людей, направленных здесь на основе названия вопроса (не проблема ОП)
Скажем, вы хотите удалить все строки с отрицательными значениями. Одно решение лайнера является: –
Пошаговое объяснение: –
Давайте сгенерируем случайный кадр данных нормального распределения 5×5
Пусть условие удаляет негативы. Логическое значение df, удовлетворяющее условию:
Булева серия для всех строк, удовлетворяющих условию. Примечание. Если какой-либо элемент в строке не соответствует условию, строка помечается как ложная.
Наконец, отфильтруйте строки из фрейма данных на основе условия
Вы можете присвоить его обратно df, чтобы фактически удалить против фильтрации, выполненной выше
df = df[(df > 0).all(axis=1)]
Это может быть легко расширено для фильтрации строк, содержащих NaN (не числовые записи): –
df = df[(
Python Pandas: как удалить строки в DataFrame
Python Pandas dataframe drop () — это встроенная функция, которая используется для удаления строк. Drop () удаляет строку на основе индекса, предоставленного этой функции. Мы можем удалить одну или несколько строк из DataFrame несколькими способами. Мы можем отбросить строки, используя определенный индекс или список индексов, если мы хотим удалить несколько строк.
Как удалить строки в DataFrame
Pandas DataFrame предоставляет функцию-член drop (), синтаксис которой следующий.
Индексные метки или метки столбцов для удаления.
Следует ли удалять метки из индекса (0 или ‘index’) или столбцов (1 или ‘columns’).
index : Одиночная метка или список
Альтернатива указанию оси ( labels, axis = 0 эквивалентно index = метки ).
Новое в версии 0.21.0.
Альтернатива указания оси ( labels, axis = 1 эквивалентна columns = labels ).
Новое в версии 0.21.0.
Для MultiIndex, уровень, с которого будут удалены метки.
inplace: bool, по умолчанию False
Если True, выполните операцию на месте и верните None.
Если ‘ignore’, подавить ошибку , и удаляются только существующие метки.
См. следующий пример кода.
В приведенном выше коде мы определили один фрейм данных, а затем распечатали этот фрейм данных, который содержит пять строк. Каждая строка имеет свой индекс, поэтому мы можем легко удалить конкретную строку, используя ее индекс..
В нашем коде я удалил строку с индексом «C». Итак, распечатайте фрейм данных.
Вывод
Удалить несколько строк в Pandas DataFrame
Если мы передадим список индексов функции drop (), она удалит несколько строк.
См. следующий код.
Выходные данные
Из выходных данных вы можете видеть, что мы удалили три строки с индексами c , d и e .
Итак, это единственный способ удалить одну или несколько строк в фрейме данных Python pandas.
Удалить строки на основе условия столбца
Как и в SQL, мы также можем удалить конкретную строку на основе условия.
См. следующий код.
В приведенном выше коде мы получаем индекс, основанный на условии, которым является Имя символа == ‘ Спеллман ».
Это даст объект индекса, содержащий метки индекса для какого столбца ‘ Имя персонажа ‘имеет значение’ Spellman ‘. Итак, мы получили индекс d.
Теперь передайте его в фрейм данных .drop () для удаления этих строк, например,
Он удалит все строки, для которых столбец ‘ Имя персонажа ‘имеет значение’ Spellman ‘.
Вывод
На основе выпадающих строк при нескольких условиях в столбце
Давайте удалим все строки, для которых столбец ‘ C Имя персонажа ‘имеет значение’ BoJack ‘или’ Имя ‘имеет значение’ Will ‘.
См. следующий код.
Вывод
Удалить строки на основе нескольких условий в разных столбцах
Давайте удалим все строки, для которых в столбце « Имя символа » указано « Одиннадцать ‘и’ Series ‘ содержит’ Stranger Things ‘.
См. следующий код.
В приведенном выше случае нам нужно использовать & между несколькими условиями.
Если он удовлетворяет условию, то а затем удаляет строку; в противном случае он не удалит строку Pandas.
Output
Заключение
Функция drop () кадра данных Pandas используется для удаления строк с помощью их индекса, или мы можем применить несколько условий. Какие бы условия ни выполнялись, мы получим их индекс и в конечном итоге удалим строку из фрейма данных.