Перейти к содержимому

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

  • автор:

Удалить строки в 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 бронзовых знаков

Как удалить строки в 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 удалить столбец?».

Удаление строк из DataFrame на основе условного выражения в Pandas

Часто возникает необходимость удалить определенные строки из DataFrame в Pandas на основе определенных условий. Например, представим, что у нас есть DataFrame, и мы хотим удалить строки, в которых длина строки в определенном столбце превышает 2.

import pandas as pd data = df = pd.DataFrame(data)

В этом DataFrame мы хотим удалить строки из column1 , где длина строки больше 2. В первую очередь, кажется логичным использовать следующий код для достижения этой цели:

df[(len(df['column1']) < 2)]

Однако, выполнение этого кода приведет к ошибке KeyError: ‘no item named False’ .

Почему возникает ошибка?

Ошибка происходит потому, что len(df[‘column1’]) возвращает количество строк в столбце, а не длину каждой отдельной строки в столбце. Поэтому, условное выражение (len(df[‘column1’]) < 2) возвращает либо True , либо False , вместо серии булевых значений.

Как правильно удалять строки на основе условного выражения?

Для удаления строк из DataFrame на основе условного выражения нужно использовать метод apply() вместе с лямбда-функцией. Вот как это можно сделать:

df = df[df['column1'].apply(lambda x: len(x) <= 2)]

После выполнения этого кода, DataFrame будет содержать только те строки, в которых длина строки в column1 меньше или равна 2.

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

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