Как удалить строку из датафрейма pandas
Перейти к содержимому

Как удалить строку из датафрейма pandas

  • автор:

Как удалить строки по индексу в Pandas (с примерами)

Вы можете использовать следующий синтаксис, чтобы удалить одну строку из pandas DataFrame по номеру индекса:

#drop first row from DataFrame df = df.drop (index= 0 ) 

И вы можете использовать следующий синтаксис, чтобы удалить несколько строк из pandas DataFrame по номерам индексов:

#drop first, second, and fourth row from DataFrame df = df.drop (index=[ 0 , 1 , 3 ]) 

Если ваш DataFrame имеет строки в качестве значений индекса, вы можете просто передать имена в виде строк для удаления:

df = df.drop (index=['first', 'second', 'third']) 

В следующих примерах показано, как на практике удалять строки по индексу.

Пример 1. Удаление одной строки по индексу

В следующем коде показано, как удалить вторую строку в кадре данных pandas:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team first last points 0 Mavs Dirk Nowitzki 26 1 Lakers Kobe Bryant 31 2 Spurs Tim Duncan 22 3 Cavs Lebron James 29 #drop second row from DataFrame df = df.drop (index= 1 ) #view resulting dataFrame df team first last points 0 Mavs Dirk Nowitzki 26 2 Spurs Tim Duncan 22 3 Cavs Lebron James 29 

Пример 2. Удаление нескольких строк по индексу

Следующий код показывает, как удалить несколько строк в pandas DataFrame по индексу:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team first last points 0 Mavs Dirk Nowitzki 26 1 Lakers Kobe Bryant 31 2 Spurs Tim Duncan 22 3 Cavs Lebron James 29 #drop first, second, and fourth row from DataFrame df = df.drop (index=[ 0 , 1, 3 ]) #view resulting dataFrame df team first last points 2 Spurs Tim Duncan 22 

Пример 3: удаление строк, когда индекс является строкой

В следующем коде показано, как удалять строки из кадра данных pandas по индексу, когда индекс представляет собой строку, а не число:

import pandas as pd #create DataFrame df = pd.DataFrame(, index=['A', 'B', 'C', 'D']) #view DataFrame df team first last points A Mavs Dirk Nowitzki 26 B Lakers Kobe Bryant 31 C Spurs Tim Duncan 22 D Cavs Lebron James 29 #remove rows with index values 'A' and 'C' df = df.drop (index=['A', 'C']) #view resulting DataFrame df team first last points B Lakers Kobe Bryant 31 D Cavs Lebron James 29 

Как удалить строки в Pandas DataFrame на основе условия

Мы можем использовать следующий синтаксис для удаления строк в pandas DataFrame на основе условия:

Метод 1: удаление строк на основе одного условия

df = df[df.col1 > 8] 

Метод 2: удаление строк на основе нескольких условий

df = df[(df.col1 > 8) & (df.col2 != 'A')] 

Примечание.Мы также можем использовать функцию drop() для удаления строк из DataFrame, но эта функция оказалась намного медленнее, чем простое присвоение DataFrame отфильтрованной версии самого себя.

В следующих примерах показано, как использовать этот синтаксис на практике со следующими пандами DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team pos assists rebounds 0 A G 5 11 1 A G 7 8 2 A F 7 10 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 7 B F 4 12 

Метод 1: удаление строк на основе одного условия

В следующем коде показано, как удалять строки в DataFrame на основе одного условия:

#drop rows where value in 'assists' column is less than or equal to 8 df = df[df.assists > 8] #view updated DataFrame df team pos assists rebounds 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 

Любая строка, которая имела значение меньше или равное 8 в столбце «помощь», была удалена из DataFrame.

Метод 2: удаление строк на основе нескольких условий

В следующем коде показано, как удалять строки в DataFrame на основе нескольких условий:

#only keep rows where 'assists' is greater than 8 and rebounds is greater than 5 df = df[(df.assists > 8) & (df.rebounds > 5)] #view updated DataFrame df team pos assists rebounds 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 

Единственные строки, которые мы сохранили в DataFrame, были те, в которых значение помощи было больше 8, а значение подбора больше 5.

Обратите внимание, что мы также можем использовать | оператор для применения фильтра «или»:

#only keep rows where 'assists' is greater than 8 or rebounds is greater than 10 df = df[(df.assists > 8) | (df.rebounds > 10)] #view updated DataFrame df team pos assists rebounds 0 A G 5 11 3 A F 9 6 4 B G 12 6 5 B G 9 5 6 B F 9 9 7 B F 4 12 

Единственные строки, которые мы сохранили в DataFrame, были те, в которых значение помощи было больше 8 или значение подбора было больше 10.

Все строки, не соответствующие одному из этих условий, удалялись.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Как из Pandas Dataframe удалить строку?

Pandas представляет нам отличные инструменты для обработки данных, в том числе для удаления той информации, которая нам не нужна. В этой статье мы рассмотрим различные способы удаления строк из Dataframe Pandas.

Как из Pandas удалить строку?

Создадим учебный Dataframe с описанием городов России, с которым мы будем в дальнейшем работать:

import pandas as pd
city_data = ‘Город’:[‘Москва’, ‘Казань’, ‘Владивосток’, ‘Санкт-Петербург’, ‘Калининград’],
‘Дата основания’:[‘1147’, ‘1005’, ‘1860’, ‘1703’, ‘1255’],
‘Площадь’:[‘2511’, ‘516’, ‘331’, ‘1439’, ‘223’],
‘Население’:[‘11,9’, ‘1,2’, ‘0,6’, ‘4,9’, ‘0,4’],
‘Погода’:[‘8’, ‘8’, ’17’, ‘9’, ’12’] >
city_df = pd.DataFrame(city_data)
city_df

В Pandas для удаления строк, а также столбцов используется метод drop. Его синтаксис следующий (обратите внимание, что необязательно использовать все параметры, можно только те, которые необходимы нам):

drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’), где:

  • labels – номера или названия столбцов для удаления
  • axis – значение 0, если вы хотите удалить строки, либо 1, если планируете удалять столбцы
  • index – определяет, какие строки надо удалить
  • columns – определяет, какие столбцы надо удалить
  • inplace – изменяет оригинальный Dataframe, если параметр равен True
  • errors – игнорируются ошибки, если параметр задан как ignore

Способ 1. Удаление строки в Pandas по ее индексу

Для каждой строки в Dataframe Pandas присваивает индекс, обычно это число. В нашем учебном Dataframe, к примеру, у Москвы индекс 0, а у Калининграда 4. Давайте уберем запись с Владивостоком:

city_df.drop(labels = [2],axis = 0)

Мы можем удалить несколько строк, перечислив их индексы через запятую в квадратных скобках:

city_df.drop(labels = [2,3],axis = 0)

Обратите внимание, что по умолчанию метод drop не изменяет исходный dataframe, если вы хотите, что бы это было сделано, добавьте параметр inplace=True

city_df.drop(labels = [4],axis = 0, inplace = True)

Способ 2. Удаление строки в Pandas по ее содержанию

Предположим, нам надо убрать строку с названием города «Казань», но мы не знаем его индекса и хотим ее удалить по названию. Для этого мы должны сначала изменить столбец с индексами и вместо цифровых значений задать данные из столбца «Город»:

city_df = city_df.set_index(‘Город’)
city_df

Теперь, когда в качестве индексов у нас названия городов, мы можем выполнить поставленную перед нами задачу:

city_df.drop([‘Казань’],axis = 0)

Мы можем удалить несколько строк по их содержанию в Pandas, перечислив их через запятую в квадратных скобках:

city_df.drop([‘Казань’,’Владивосток’],axis = 0)

Способ 3. Удаление строки в Pandas по условию

При помощи метода loc мы можем удалять строки по условию, к примеру мы хотим убрать из Dataframe те города, у которых площадь меньше 1 000 км2.

Так как мы будем применять математические условия, то сначала столбец «Площадь» мы должны перевести в формат int64:

city_df[‘Площадь’] = pd.to_numeric(city_df[‘Площадь’])
city_df[‘Площадь’]

Далее при помощи метода loc мы передадим в Dataframe отфильтрованные строки, а именно те, которые удовлетворяют условию, что Площадь > 1 000 км2

city_df = city_df.loc[city_df[‘Площадь’] > 1000]
city_df

Спасибо за внимание. Дочитавшим до конца – традиционный бонус, наш ноутбук по этой статье.

P.S. Рекомендую еще ознакомиться с нашей статьей «Как из Pandas удалить столбец?».

Как удалить всю строчку вместе с индексом в pandas python

Всем привет, мне нужно полностью удалить строку 888 у объекта DataFrame. Как это сделать? Буду очень признателен.

0 3 7.2500 22.0 male 1 1 71.2833 38.0 female 2 3 7.9250 26.0 female 3 1 53.1000 35.0 female 4 3 8.0500 35.0 male .. . . . . 886 2 13.0000 27.0 male 887 1 30.0000 19.0 female 888 3 23.4500 NaN female 889 1 30.0000 26.0 male 890 3 7.7500 32.0 male 

Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 2 фев 2020 в 14:45
kali_xyyali kali_xyyali
79 1 1 золотой знак 1 1 серебряный знак 11 11 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

In [79]: df Out[79]: 1 2 3 4 0 0 3 7.2500 22.0 male 1 1 71.2833 38.0 female 2 3 7.9250 26.0 female 3 1 53.1000 35.0 female 4 3 8.0500 35.0 male 886 2 13.0000 27.0 male 887 1 30.0000 19.0 female 888 3 23.4500 NaN female 889 1 30.0000 26.0 male 890 3 7.7500 32.0 male 

удаляем строку/строки по значениям индекса:

df = df.drop(index=[888]) 
df = df.query("index not in [888]") 
df = df.query("index != 888") 
In [81]: df Out[81]: 1 2 3 4 0 0 3 7.2500 22.0 male 1 1 71.2833 38.0 female 2 3 7.9250 26.0 female 3 1 53.1000 35.0 female 4 3 8.0500 35.0 male 886 2 13.0000 27.0 male 887 1 30.0000 19.0 female 889 1 30.0000 26.0 male 890 3 7.7500 32.0 male 

ответ-бонус:

можно как-то сделать индексирование по порядку?

df = df.reset_index(drop=True) 
In [94]: df Out[94]: 1 2 3 4 0 3 7.2500 22.0 male 1 1 71.2833 38.0 female 2 3 7.9250 26.0 female 3 1 53.1000 35.0 female 4 3 8.0500 35.0 male 5 2 13.0000 27.0 male 6 1 30.0000 19.0 female 7 1 30.0000 26.0 male 8 3 7.7500 32.0 male 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *