Как удалить один или несколько столбцов (или строк) в Pandas
В этом руководстве вы узнаете, как использовать Pandas для удаления одного или нескольких столбцов. При работе с большими DataFrame в Pandas у вас может возникнуть необходимость удалить один или несколько из этих столбцов. Это позволяет исключить данные, которые не являются релевантными или не нужны для вашего анализа.
К концу этого руководства вы научитесь:
Как удалить столбец Pandas по позиции
Как удалить столбец Pandas по имени
Как удалить столбец Pandas по условию
Как удалить несколько столбцов Pandas
Как безопасно удалить столбцы Pandas, если они существуют
И многому другому
Содержание
Загрузка примера DataFrame Как удалить столбец Pandas по имени Как удалить столбцы Pandas по имени на месте (inplace) Как удалить несколько столбцов Pandas по именам Как удалить столбец Pandas по позиции/индексу Как удалить несколько столбцов Pandas по позициям/индексам Как удалить столбец Pandas, если он существует Как удалить столбцы Pandas по условию Как удалить столбцы Pandas, содержащие пропущенные значения Удаление столбцов Pandas, где отсутствует определённое количество записей Удаление столбцов Pandas, где отсутствует определённый процент записей Как удалить все столбцы Pandas после определённого столбца Как удалить столбцы Pandas определённых типов данных Как извлечь столбец Pandas с помощью метода pop() Заключение Дополнительные ресурсы
Загрузка примера DataFrame
Чтобы следовать этому руководству построчно, я предоставил ниже пример DataFrame из Pandas. Просто скопируйте и вставьте код в свой любимый редактор. Если у вас есть собственный DataFrame, вы можете использовать его, хотя ваши результаты, конечно, будут отличаться. Ниже вы можете ознакомиться с примером DataFrame из Pandas:
# Загрузка примера Pandas DataFrame
import pandas as pd
# Создаем DataFrame из словаря. Ключи словаря становятся названиями столбцов.
df = pd.DataFrame({
'Name': ['Nik', 'Kate', 'Evan', 'Kyra'], # Столбец с именами
'Age': [33, 32, 36, None], # Столбец с возрастом, содержит пропущенное значение None
'Location': ['Canada', 'USA', None, None], # Столбец с местоположением, содержит пропущенные значения None
'Current': [True, False, False, True]}) # Столбец с булевыми значениями
# Выводим весь DataFrame на консоль
print(df)
# Returns:
# Name Age Location Current
# 0 Nik 33.0 Canada True
# 1 Kate 32.0 USA False
# 2 Evan 36.0 None False
# 3 Kyra NaN None TrueIВ приведённом выше примере DataFrame у нас есть набор данных из четырёх столбцов:
Name: столбец, содержащий строки (имена)Age: столбец, содержащий возраст пользователяLocation: местоположение пользователяCurrent: является ли пользователь текущим, представлено в виде булевых значений
Некоторые из этих столбцов также содержат пропущенные данные — это нужно для демонстрации методов удаления столбцов с отсутствующими значениями.
Как удалить столбец Pandas по имени
Чтобы удалить столбец из DataFrame в Pandas, можно воспользоваться методом .drop(), который позволяет передать имя удаляемого столбца. Давайте посмотрим на метод .drop() и параметры, которые он принимает:
В приведённом выше блоке кода показаны различные параметры метода и их значения по умолчанию.
Чтобы удалить один столбец в Pandas, вы можете передать строку, представляющую имя столбца, либо в параметр:
labels=, либоcolumns=
Эти параметры принимают имя одного столбца или список имён нескольких столбцов (как будет показано в следующем разделе). Давайте посмотрим, как можно использовать параметр labels= для удаления одного столбца:
В приведённом выше примере мы передали столбец, который хотим удалить ('Current'), в метод .drop(). Однако этот способ выглядит немного громоздко. Мы можем упростить код, воспользовавшись параметром columns=, который заменяет необходимость указывать axis=1.
Давайте посмотрим, как можно упростить удаление одного столбца с помощью метода .drop():
В приведённом выше блоке кода мы использовали параметр columns=, чтобы указать, какой столбец нужно удалить. Это упрощает код и делает его более читаемым, поскольку сразу понятно, что речь идёт об удалении столбцов, а не строк.
Как удалить столбцы Pandas по имени на месте (in-place)
В предыдущих примерах вы узнали, как удалять столбцы Pandas по их имени. Однако эти операции выполнялись с повторным присваиванием DataFrame переменной того же имени. Также можно выполнять удаление на месте, что может быть полезно для управления памятью — особенно при работе с большими наборами данных.
В следующем блоке кода вы узнаете, как удалить столбец Pandas по имени на месте:
В приведённом выше блоке кода мы использовали метод .drop(), передав в него параметр inplace=True. Это позволило выполнить операцию на месте, то есть без необходимости присваивать результат новой переменной. В результате метод не возвращает DataFrame, а изменяет исходный объект.
В следующем разделе вы узнаете, как удалять сразу несколько столбцов в Pandas.
Как удалить несколько столбцов Pandas по именам
При использовании метода .drop() объекта Pandas DataFrame можно удалить сразу несколько столбцов по их именам, передав список названий удаляемых столбцов. Этот метод работает аналогично примерам выше, где вы могли:
Передать список столбцов в параметр
labels=и указатьaxis=1,Или передать список столбцов в параметр
columns=.
Давайте посмотрим, как использовать метод .drop() для удаления нескольких столбцов по имени — в данном случае удалим столбцы 'Current' и 'Location':
Давайте разберём, что мы сделали выше:
Мы использовали метод
.drop(), передав список удаляемых столбцов через параметрcolumns=Альтернативно, можно использовать параметр
labels=, но в этом случае нужно также указатьaxis=1, чтобы обозначить, что мы удаляем столбцыТакже операцию можно выполнить на месте, добавив параметр
inplace=True, как показано ниже:
В следующем разделе вы узнаете, как удалять столбцы в Pandas по их позиции или индексу.
Как удалить столбец Pandas по позиции / индексу
Удаление столбца по его порядковому номеру (или индексу) можно выполнить с помощью метода .drop(). Этот метод позволяет обращаться к столбцам по их позиции.
Для этого используется атрибут df.columns, который возвращает структуру, похожую на список, содержащую названия всех столбцов DataFrame. С помощью срезов списка (list slicing) можно выбрать те столбцы, которые хотите удалить.
Чтобы лучше понять, как это работает, рассмотрим пример, в котором удалим третий столбец:
В вызове метода .drop() мы передаём результат индексации атрибута df.columns, чтобы получить третий элемент (индекс 2). Технически, это извлекает конкретное имя столбца, в данном случае — 'Location'.
Как удалить несколько столбцов Pandas по позиции / индексу
Удаление нескольких столбцов по их позиции или индексу выполняется аналогично примеру выше. С помощью метода .drop() и атрибута df.columns можно обращаться к столбцам по их порядковому номеру.
Чтобы нагляднее показать это, давайте удалим первый и третий столбцы нашего DataFrame на месте:
Важно отметить, что в приведённом выше примере мы использовали двойные квадратные скобки,[[0, 2]], чтобы выбрать более одного столбца.
Как удалить столбец Pandas, если он существует
По умолчанию метод .drop() в Pandas вызывает ошибку, если вы пытаетесь удалить несуществующий столбец. Это поведение контролируется параметром errors=, который по умолчанию установлен в значение 'raise'.
Альтернативное значение параметра — 'ignore'. Оно позволяет игнорировать ошибки, если указанный столбец отсутствует в DataFrame.
Давайте посмотрим, как можно безопасно удалить столбец, если он существует:
В приведённом выше примере мы попытались удалить столбец 'FAKE COLUMN'. Однако, поскольку такого столбца не существует, ничего удалено не было.
Это позволяет избежать необходимости писать конструкции if-else или блоки try-except для безопасной обработки таких операций. Вместе с тем, если вы хотите уведомить пользователя о том, что столбец отсутствует, это нужно реализовать самостоятельно.
В следующем блоке кода мы воспользуемся конструкцией try-except, чтобы сообщить пользователю о том, что столбец не найден, вместо того чтобы игнорировать ошибку без уведомления:
В приведённом выше примере мы поместили вызов метода .drop() внутрь блока try-except. В блоке except мы отлавливаем ошибку KeyError и выводим пользователю информационное сообщение с помощью print.
Как удалить столбцы Pandas на основе условия
В этом разделе вы узнаете, как удалять столбцы в Pandas на основе определённого условия. Например, вы научитесь удалять все столбцы, в названиях которых отсутствует буква 'a'.
Это можно сделать аналогично предыдущим примерам — с помощью метода .drop(). Мы можем отфильтровать список имён столбцов так, чтобы он включал только те столбцы, которые удовлетворяют нашему условию (или не удовлетворяют), а затем передать этот список в метод .drop().
Давайте разберём, что мы сделали в приведённом выше блоке кода:
Мы использовали метод
.drop()для удаления определённых столбцов, указав это через параметрcolumns=В метод мы передали результат работы генератора списка, который включал только те названия столбцов, в которых отсутствует буква
'a'
Как удалить столбцы Pandas, содержащие пропущенные значения
Существует два распространённых сценария, в которых может понадобиться удалить столбцы, содержащие пропущенные значения:
Удалить все столбцы, содержащие хотя бы одно пропущенное значение
Удалить столбцы, содержащие определенное количество (или процент) пропущенных значений
Чтобы удалить все столбцы, содержащие любое количество пропущенных значений, можно воспользоваться методом .dropna(). Давайте посмотрим, как он работает:
По умолчанию метод .dropna() удаляет столбцы (при указании axis=1), в которых хотя бы одно значение отсутствует. Это поведение задаётся параметром how='any'.
Удаление столбцов Pandas, где отсутствует определённое количество записей
Если вы хотите удалить столбцы, содержащие конкретное количество пропущенных значений, можно использовать параметр thresh=, который принимает целое число — это минимальное количество непропущенных значений, которые должны присутствовать в столбце.
Давайте посмотрим, как удалить столбцы, в которых отсутствует не менее двух значений:
Давайте разберём, что делает приведённый выше код, так как это не очевидно с первого взгляда:
Параметр
thresh=задаёт минимальное количество непропущенных (не NaN) значений, которые должны присутствовать в столбце.В данном случае мы указали, что должно быть не менее 3 непропущенных значений. Это означает, что в столбце может быть до 2 пропущенных значений, учитывая общую длину DataFrame.
Удаление столбцов Pandas, где отсутствует определённый процент записей
Более гибкий и логичный способ — задавать порог в процентах, а не в абсолютных значениях. Например, вы можете захотеть удалить все столбцы, в которых отсутствует 50% или более данных. Это можно сделать с помощью метода .isnull() в сочетании с фильтрацией.
Используя метод .isnull(), мы можем рассчитать процент пропущенных значений в каждом столбце и удалить те столбцы, где этот процент превышает заданный порог.
Давайте посмотрим, как удалить столбцы, в которых 50% и более значений отсутствуют:
Давайте разберём, что мы сделали в приведённом выше блоке кода:
Мы создали новую переменную
columns, в которую записали результат цепочки методов.isnull()и.mean(). Это позволило нам получить процент пропущенных значений для каждого столбца.Далее мы применили условие (
> 0.5), в результате чего получили массив булевых значений —Trueозначает, что столбец содержит более 50% пропусков, и его нужно удалить.Затем мы использовали этот булев массив для фильтрации списка имён столбцов, чтобы получить только те, которые удовлетворяют нашему условию.
В данном случае был удалён только столбец
'Location', поскольку в нём как раз отсутствует 50% значений.
Как удалить столбцы Pandas после определённого столбца
Также можно использовать селектор .loc для удаления столбцов на основе их имён. Это позволяет удалять все столбцы, следующие после заданного столбца.
Метод .loc позволяет выбирать строки и столбцы по меткам и задавать диапазоны (срезы) данных. Давайте посмотрим, как удалить все столбцы после определённого столбца:

Если мы хотим удалить все столбцы, идущие после столбца 'Age', мы можем написать следующий код:
Селектор .loc указывает, что мы хотим сохранить все строки (обозначено :) и все столбцы вплоть до столбца 'Age'. Как видно, все столбцы, идущие после него, были удалены!

Аналогично, мы можем использовать селектор .iloc для удаления столбцов, находящихся до или после заданного номера столбца.
Допустим, мы хотим удалить все столбцы, идущие до третьего столбца. Мы можем написать следующее:
Селектор .iloc позволяет указать срезы строк и столбцов, которые мы хотим выбрать. Все столбцы, которые не входят в этот срез, будут удалены.
Как удалить столбцы Pandas определённого типа данных
Чтобы удалить столбцы определённого типа данных в Pandas, можно воспользоваться методом .select_dtypes(). Этот метод позволяет указать типы данных, которые вы хотите исключить из DataFrame.
Давайте рассмотрим пример, в котором удалим все столбцы с булевым типом данных (bool):
IВ приведённом выше примере мы использовали метод .select_dtypes() с параметром exclude=. Этот параметр принимает список типов данных, которые нужно исключить. Все столбцы, соответствующие указанным типам данных, будут удалены из результирующего DataFrame.
Как извлечь и удалить столбец с помощью метода .pop()
.pop()В этом разделе вы узнаете, как использовать метод .pop() в Pandas для удаления столбца и сохранения его в отдельной переменной. Это особенно полезно в задачах машинного обучения, где может понадобиться удалить столбец, содержащий целевую переменную, и одновременно сохранить его для дальнейшего использования.
Давайте посмотрим, как использовать метод .pop() для удаления столбца 'Name' из DataFrame и сохранения его в виде отдельного объекта Series:
В приведённом выше блоке кода мы удалили столбец 'Name' с помощью метода .pop() и сохранили его в переменной names. Это означает, что столбец был удалён из DataFrame, а его данные были сохранены в виде отдельного объекта Series.
Заключение
В этом руководстве вы узнали множество полезных способов удаления столбцов из DataFrame в Pandas. Умение эффективно работать с DataFrame — важный навык как для аналитиков данных, так и для специалистов по машинному обучению. Понимание гибких возможностей, которые предоставляет Pandas при работе со столбцами, поможет сделать ваш рабочий процесс намного проще и эффективнее!
В рамках этого урока вы научились использовать следующие методы:
.drop()— для удаления одного или нескольких столбцов.dropna()— для удаления столбцов с пропущенными значениями.pop()— для удаления столбца с одновременным сохранением его данных.locи.iloc— для удаления столбцов по имени или индексу
Все эти инструменты позволяют удалять столбцы разными способами в зависимости от ваших задач.
Дополнительные ресурсы
Чтобы узнать больше по смежным темам, ознакомьтесь со следующими материалами:
Последнее обновление