Как удалить строки в 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 (с примерами)
Вы можете использовать следующий синтаксис, чтобы удалить одну строку из 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
Удалить список строк из DataFrame Pandas
Библиотека pandas в Python широко популярна для представления данных в виде табличных структур данных. Набор данных организован в виде двумерной матрицы, состоящей из строк и столбцов. Библиотека Pandas предлагает множество функций, которые могут помочь программисту анализировать набор данных, предоставляя ценную математическую информацию.
Табличная структура данных известна как фрейм данных, который можно сгенерировать с помощью функции pandas DataFrame(). В этой статье мы выполним простую операцию по удалению нескольких строк из фрейма данных pandas.
Во-первых, нам нужно подготовить набор данных, а затем сгенерировать фрейм данных с помощью функции pandas «DataFrame()». Начнем с этого —
Подготовка набора данных
Данные из переданного набора данных будут упорядочены в виде строк и столбцов.
Пример
import pandas as pd dataset = <"Aman":[98, 92, 88, 90, 91], "Raj":[78, 62, 90, 71, 45], "Saloni":[82, 52, 95, 98, 80],>dataframe = pd.DataFrame(dataset,index=["Physics", "Chemistry", "Maths", "English", "Biology"]) print(dataframe)
Выход
Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Maths 88 90 95 English 90 71 98 Biology 91 45 80
Удаление строк через значения индекса
Для удаления строки мы будем использовать метод pandas «drop()». Это эффективный и простой способ удаления строк из фрейма данных. Ниже приведен синтаксис этого метода:
dataframe.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
Нам не требуются все параметры для инициации операции «отбрасывания» (большинства значений по умолчанию будет достаточно). Существует два метода удаления строк: —
Мы укажем значение индекса для каждой строки, которую необходимо удалить.
Пример
Ниже приведена реализация этого метода. Здесь,
- После создания фрейма данных мы использовали метод drop() для удаления 3 rd и 4 th строк из фрейма данных.
- Мы выбрали исходный фрейм данных, хранящийся в переменной «dataframe», и заблокировали значения индекса для соответствующих строк, которые мы хотели удалить, с помощью «dataframe.index[[]] ”
- Создается новый фрейм данных, состоящий из оставшихся строк.
import pandas as pd dataset = <"Aman":[98, 92, 88, 90, 91], "Raj":[78, 62, 90, 71, 45], "Saloni":[82, 52, 95, 98, 80],>dataframe = pd.DataFrame(dataset,index=["Physics", "Chemistry", "Maths", "English", "Biology"]) print(dataframe) Drop_dataframe = dataframe.drop(dataframe.index[[2, 3]]) print("After dropping 3rd and 4th row") print(Drop_dataframe)
Выход
Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Maths 88 90 95 English 90 71 98 Biology 91 45 80 After dropping 3rd and 4th row Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Biology 91 45 80
Удаление строк через метки или имена строк
В этом методе мы используем точное имя строк (меток), которые мы хотим удалить из фрейма данных. Мы снова будем использовать метод drop() для выполнения этой техники. сейчас,
- Мы использовали тот же метод drop() для удаления третьей и четвертой строк из фрейма данных, но на этот раз мы использовали имя строки, которое мы пометили при создании фрейма данных.
- Создается новый фрейм данных, а исходный фрейм данных остается неизменным.
Пример
import pandas as pd dataset = <"Aman":[98, 92, 88, 90, 91], "Raj":[78, 62, 90, 71, 45], "Saloni":[82, 52, 95, 98, 80],>dataframe = pd.DataFrame(dataset,index=["Physics", "Chemistry", "Maths", "English", "Biology"]) print(dataframe) Drop_dataframe = dataframe.drop(["Maths", "English"]) print("After dropping 3rd and 4th row") print(Drop_dataframe)
Выход
Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Maths 88 90 95 English 90 71 98 Biology 91 45 80 After dropping 3rd and 4th row Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Biology 91 45 80
Мы также можем включить аргумент «inplace», если не хотим создавать еще один фрейм данных. Этот аргумент может изменить текущий фрейм данных, внеся в него изменения. Значением по умолчанию для этого аргумента является «False». Мы установим значение аргумента inplace как «True».
Использование индексного среза
Мы также можем удалить список строк, используя срез индекса. Ниже приведен пример этого:
- Здесь мы разрезали индекс и создали диапазон для удаления строк.
- Мы распечатали исходный фрейм данных, а затем использовали метод «dataframe.index[2:4]», чтобы установить диапазон от 2 до 3, и «dataframe.drop()». ” для удаления этих строк.
- Наконец, будет создан новый фрейм данных, состоящий из оставшихся строк.
Пример
import pandas as pd dataset = <"Aman":[98, 92, 88, 90, 91], "Raj":[78, 62, 90, 71, 45], "Saloni":[82, 52, 95, 98, 80],>dataframe = pd.DataFrame(dataset,index=["Physics", "Chemistry", "Maths", "English", "Biology"]) print(dataframe) drop_dataframe = dataframe.drop(dataframe.index[2:4]) print("After dropping 3rd and 4th row") print(drop_dataframe)
Выход
Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Maths 88 90 95 English 90 71 98 Biology 91 45 80 After dropping 3rd and 4th row Aman Raj Saloni Physics 98 78 82 Chemistry 92 62 52 Biology 91 45 80
Заключение
В этой статье мы рассмотрели основы фрейма данных pandas. Мы поняли различные методы удаления нескольких строк из фрейма данных. Мы обсудили различные способы указания строк, которые мы хотим удалить, например, с помощью «значения индекса» и «имя строки». Наконец, мы обсудили простой метод среза индекса.
Все права защищены. © Linux-Console.net • 2019-2024
Удалить строки в DataFrame удовлетворяющие условию
Как удалить строки в Pandas DataFrame, в которых значения в столбце STP == 1005092 ? Подробно: Я занимаюсь обработкой данных в Jupyter notebook : нормальное распределение, спектрограммы, гистограммы и тп. У меня есть 1500 тысячи проиндексированных массивов внутри одного файла (Индекс »STP»). Есть 2 массива которые не подходят по показаниям (явно выделяются из остальных 1498 значений), но проходят тест на нормальное распределение, из-за чего не фильтруются программой. Я пробовал команды data.STP.remove(1005072) , где семизначное число — это индекс массива, но все тщетно. Код:
cols = ['ttt','IK05','IK06','IK07','IK08','IK10','IK11','IK14','IK16','IK20','DA05','DA06','DA07','DA08','DA10','DA11','DA14','DA16', 'DA20', 'GZ1','GZ2','GZ3','GZ4', 'LLS', 'LLD', 'STP'] def lasread (fname): data = pd.read_table(fname, delim_whitespace = True,na_values = '-999.25', index_col=False) return data[cols] data = None for name in las: print(name) if data is None: data = lasread (name) else: data = pd.concat([data, lasread (name)]) ndata = data.STP.as_matrix(columns=None) df = data[cols] df1 = df.groupby('STP') df1.head() dfp = pd.DataFrame() for name, group in df1: k,p=stats.mstats.normaltest(group[5:-5]) dfp[name] = p d=dfp.transpose() d.columns = cols goodindex = d[d.IK20>0.05][d.DA20>0.05].index - отбраковка по СКО **data.STP.remove(1005072)** filtereddata = data[cols][data.STP == -39] for f in goodindex: a = data[cols][data.STP == f] filtereddata = pd.concat([filtereddata, a]) print(filtereddata)
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 18 фев 2018 в 9:59
Георгий Москалев Георгий Москалев
73 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков