Как удалить один или несколько столбцов (или строк) в 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     True

IВ приведённом выше примере DataFrame у нас есть набор данных из четырёх столбцов:

  • Name: столбец, содержащий строки (имена)

  • Age: столбец, содержащий возраст пользователя

  • Location: местоположение пользователя

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

Некоторые из этих столбцов также содержат пропущенные данные — это нужно для демонстрации методов удаления столбцов с отсутствующими значениями.

Как удалить столбец Pandas по имени

Чтобы удалить столбец из DataFrame в Pandas, можно воспользоваться методом .drop(), который позволяет передать имя удаляемого столбца. Давайте посмотрим на метод .drop() и параметры, которые он принимает:

# Понимание метода Pandas .drop()

# Метод df.drop() используется для удаления указанных строк или столбцов из DataFrame.

df.drop(
    labels=None,        # Метки (имена) индексов строк или столбцов, которые нужно удалить.
                        # Может быть одиночной меткой или списком меток.
    axis=0,             # Ось, по которой следует удалять. 0 или 'index' для строк, 1 или 'columns' для столбцов.
                        # По умолчанию 0 (удаление строк).
    index=None,         # Альтернативный способ указать метки строк для удаления (эквивалентно labels, когда axis=0).
    columns=None,       # Альтернативный способ указать метки столбцов для удаления (эквивалентно labels, когда axis=1).
    level=None,         # Для MultiIndex: удаляет метки только с указанного уровня.
    inplace=False,      # Если True, изменения применяются к текущему DataFrame и метод ничего не возвращает.
                        # Если False (по умолчанию), возвращает новый DataFrame с удаленными элементами.
    errors='raise'      # Как обрабатывать ошибки при отсутствии меток:
                        # 'raise' (по умолчанию): вызывает ошибку, если какая-либо из указанных меток не найдена.
                        # 'ignore': игнорирует метки, которых нет, не вызывая ошибку.
)

В приведённом выше блоке кода показаны различные параметры метода и их значения по умолчанию.

Чтобы удалить один столбец в Pandas, вы можете передать строку, представляющую имя столбца, либо в параметр:

  • labels=, либо

  • columns=

Эти параметры принимают имя одного столбца или список имён нескольких столбцов (как будет показано в следующем разделе). Давайте посмотрим, как можно использовать параметр labels= для удаления одного столбца:

# Удаление одного столбца с использованием метода .drop()

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбец 'Current' из DataFrame.
# labels='Current' указывает имя столбца для удаления.
# axis=1 указывает, что удаляем по столбцам (1 соответствует столбцам, 0 — строкам).
# Поскольку inplace=False по умолчанию, возвращается новый DataFrame без удаленного столбца.
df = df.drop(labels='Current', axis=1)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age Location
# 0   Nik  33.0   Canada
# 1  Kate  32.0      USA
# 2  Evan  36.0     None
# 3  Kyra   NaN     None

В приведённом выше примере мы передали столбец, который хотим удалить ('Current'), в метод .drop(). Однако этот способ выглядит немного громоздко. Мы можем упростить код, воспользовавшись параметром columns=, который заменяет необходимость указывать axis=1.

Давайте посмотрим, как можно упростить удаление одного столбца с помощью метода .drop():

# Удаление одного столбца с использованием метода .drop()

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбец 'Current' из DataFrame.
# Используем аргумент 'columns' для прямого указания столбца.
# Это эквивалентно 'labels="Current", axis=1'.
df = df.drop(columns='Current')

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age Location
# 0   Nik  33.0   Canada
# 1  Kate  32.0      USA
# 2  Evan  36.0     None
# 3  Kyra   NaN     None

В приведённом выше блоке кода мы использовали параметр columns=, чтобы указать, какой столбец нужно удалить. Это упрощает код и делает его более читаемым, поскольку сразу понятно, что речь идёт об удалении столбцов, а не строк.

Как удалить столбцы Pandas по имени на месте (in-place)

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

В следующем блоке кода вы узнаете, как удалить столбец Pandas по имени на месте:

# Удаление одного столбца с использованием метода .drop() "на месте"

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбец 'Current' из DataFrame.
# columns='Current' указывает имя столбца.
# inplace=True означает, что изменения будут применены к самому DataFrame 'df'
# и метод не вернет новый DataFrame.
df.drop(columns='Current', inplace=True)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age Location
# 0   Nik  33.0   Canada
# 1  Kate  32.0      USA
# 2  Evan  36.0     None
# 3  Kyra   NaN     None

В приведённом выше блоке кода мы использовали метод .drop(), передав в него параметр inplace=True. Это позволило выполнить операцию на месте, то есть без необходимости присваивать результат новой переменной. В результате метод не возвращает DataFrame, а изменяет исходный объект.

В следующем разделе вы узнаете, как удалять сразу несколько столбцов в Pandas.

Как удалить несколько столбцов Pandas по именам

При использовании метода .drop() объекта Pandas DataFrame можно удалить сразу несколько столбцов по их именам, передав список названий удаляемых столбцов. Этот метод работает аналогично примерам выше, где вы могли:

  • Передать список столбцов в параметр labels= и указать axis=1,

  • Или передать список столбцов в параметр columns=.

Давайте посмотрим, как использовать метод .drop() для удаления нескольких столбцов по имени — в данном случае удалим столбцы 'Current' и 'Location':

# Удаление нескольких столбцов Pandas по имени

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем несколько столбцов из DataFrame, передавая список их имен в параметр 'columns'.
# df = df.drop(labels=['Location', 'Current'], axis=1) # Альтернативный синтаксис с 'labels' и 'axis'
df = df.drop(columns=['Location', 'Current'])

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age
# 0   Nik  33.0
# 1  Kate  32.0
# 2  Evan  36.0
# 3  Kyra   NaN

Давайте разберём, что мы сделали выше:

  • Мы использовали метод .drop(), передав список удаляемых столбцов через параметр columns=

  • Альтернативно, можно использовать параметр labels=, но в этом случае нужно также указать axis=1, чтобы обозначить, что мы удаляем столбцы

  • Также операцию можно выполнить на месте, добавив параметр inplace=True, как показано ниже:

# Удаление нескольких столбцов Pandas по имени "на месте"

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбцы 'Location' и 'Current' из DataFrame.
# Передаем список имен столбцов в параметр 'columns'.
# inplace=True означает, что изменения будут применены к самому DataFrame 'df',
# и метод не вернет новый DataFrame.
# df.drop(labels=['Location', 'Current'], axis=1, inplace=True) # Альтернативный синтаксис
df.drop(columns=['Location', 'Current'], inplace=True)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age
# 0   Nik  33.0
# 1  Kate  32.0
# 2  Evan  36.0
# 3  Kyra   NaN

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

Как удалить столбец Pandas по позиции / индексу

Удаление столбца по его порядковому номеру (или индексу) можно выполнить с помощью метода .drop(). Этот метод позволяет обращаться к столбцам по их позиции.

Для этого используется атрибут df.columns, который возвращает структуру, похожую на список, содержащую названия всех столбцов DataFrame. С помощью срезов списка (list slicing) можно выбрать те столбцы, которые хотите удалить.

Чтобы лучше понять, как это работает, рассмотрим пример, в котором удалим третий столбец:

# Удаление третьего столбца по его порядковому номеру (индексу)

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбец по его индексу.
# df.columns[2] возвращает имя столбца с индексом 2 (третьего столбца, так как индексация начинается с 0).
# В данном случае это 'Location'.
df = df.drop(columns=df.columns[2])

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age  Current
# 0   Nik  33.0     True
# 1  Kate  32.0    False
# 2  Evan  36.0    False
# 3  Kyra   NaN     True

В вызове метода .drop() мы передаём результат индексации атрибута df.columns, чтобы получить третий элемент (индекс 2). Технически, это извлекает конкретное имя столбца, в данном случае — 'Location'.

Как удалить несколько столбцов Pandas по позиции / индексу

Удаление нескольких столбцов по их позиции или индексу выполняется аналогично примеру выше. С помощью метода .drop() и атрибута df.columns можно обращаться к столбцам по их порядковому номеру.

Чтобы нагляднее показать это, давайте удалим первый и третий столбцы нашего DataFrame на месте:

# Удаление нескольких столбцов по их порядковым номерам (индексам)

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбцы, используя их порядковые индексы.
# df.columns[[0, 2]] возвращает список имен столбцов с индексами 0 ('Name') и 2 ('Location').
# inplace=True применяет изменения к текущему DataFrame 'df'.
df.drop(columns=df.columns[[0, 2]], inplace=True)

# Выводим измененный DataFrame.
print(df)

# Returns:
#     Age  Current
# 0  33.0     True
# 1  32.0    False
# 2  36.0    False
# 3   NaN     True

Важно отметить, что в приведённом выше примере мы использовали двойные квадратные скобки,[[0, 2]], чтобы выбрать более одного столбца.

Как удалить столбец Pandas, если он существует

По умолчанию метод .drop() в Pandas вызывает ошибку, если вы пытаетесь удалить несуществующий столбец. Это поведение контролируется параметром errors=, который по умолчанию установлен в значение 'raise'.

Альтернативное значение параметра — 'ignore'. Оно позволяет игнорировать ошибки, если указанный столбец отсутствует в DataFrame.

Давайте посмотрим, как можно безопасно удалить столбец, если он существует:

# Удаление столбца в Pandas, если он существует

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Пытаемся удалить столбец 'FAKE COLUMN'.
# errors='ignore' указывает Pandas игнорировать ошибку, если столбец не найден.
# Если столбец 'FAKE COLUMN' существует, он будет удален; если нет, DataFrame останется без изменений.
df = df.drop(columns='FAKE COLUMN', errors='ignore')

# Выводим измененный 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     True

В приведённом выше примере мы попытались удалить столбец 'FAKE COLUMN'. Однако, поскольку такого столбца не существует, ничего удалено не было.

Это позволяет избежать необходимости писать конструкции if-else или блоки try-except для безопасной обработки таких операций. Вместе с тем, если вы хотите уведомить пользователя о том, что столбец отсутствует, это нужно реализовать самостоятельно.

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

# Удаление столбца, если он существует, используя конструкцию try-except

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Пытаемся удалить столбец 'FAKE COLUMN'
try:
    # Метод drop() по умолчанию выдает KeyError, если столбец не найден (errors='raise')
    df = df.drop(columns='FAKE COLUMN')
except KeyError:
    # Если столбец не существует, перехватываем ошибку KeyError и выводим сообщение
    print("Column doesn't exist!")

# Returns: Column doesn't exist!

В приведённом выше примере мы поместили вызов метода .drop() внутрь блока try-except. В блоке except мы отлавливаем ошибку KeyError и выводим пользователю информационное сообщение с помощью print.

Как удалить столбцы Pandas на основе условия

В этом разделе вы узнаете, как удалять столбцы в Pandas на основе определённого условия. Например, вы научитесь удалять все столбцы, в названиях которых отсутствует буква 'a'.

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

# Удаление столбцов в Pandas, которые соответствуют условию

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Удаляем столбцы, имена которых НЕ содержат букву 'a'.
# [col for col in df.columns if 'a' not in col] - это генератор списка,
# который создает список имен столбцов, не содержащих символ 'a' (регистрозависимо).
# В данном случае будут удалены столбцы 'Age' и 'Current'.
df = df.drop(columns=[col for col in df.columns if 'a' not in col])

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name Location
# 0   Nik   Canada
# 1  Kate      USA
# 2  Evan     None
# 3  Kyra     None

Давайте разберём, что мы сделали в приведённом выше блоке кода:

  • Мы использовали метод .drop() для удаления определённых столбцов, указав это через параметр columns=

  • В метод мы передали результат работы генератора списка, который включал только те названия столбцов, в которых отсутствует буква 'a'

Как удалить столбцы Pandas, содержащие пропущенные значения

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

  1. Удалить все столбцы, содержащие хотя бы одно пропущенное значение

  2. Удалить столбцы, содержащие определенное количество (или процент) пропущенных значений

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

# Удаление столбцов, содержащих любое количество пропущенных значений

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],          # Столбец 'Age' содержит одно пропущенное значение (None/NaN)
    'Location': ['Canada', 'USA', None, None], # Столбец 'Location' содержит два пропущенных значения (None/NaN)
    'Current': [True, False, False, True]})

# Удаляем столбцы, в которых есть хотя бы одно пропущенное значение.
# axis=1 указывает на работу со столбцами.
# По умолчанию how='any', что означает удаление, если есть *любое* пропущенное значение.
df = df.dropna(axis=1)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name  Current
# 0   Nik     True
# 1  Kate    False
# 2  Evan    False
# 3  Kyra     True

По умолчанию метод .dropna() удаляет столбцы (при указании axis=1), в которых хотя бы одно значение отсутствует. Это поведение задаётся параметром how='any'.

Удаление столбцов Pandas, где отсутствует определённое количество записей

Если вы хотите удалить столбцы, содержащие конкретное количество пропущенных значений, можно использовать параметр thresh=, который принимает целое число — это минимальное количество непропущенных значений, которые должны присутствовать в столбце.

Давайте посмотрим, как удалить столбцы, в которых отсутствует не менее двух значений:

# Удаление столбцов, содержащих минимальное количество НЕпропущенных значений

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],          # 3 НЕпропущенных значения (33, 32, 36), 1 пропущенное
    'Location': ['Canada', 'USA', None, None], # 2 НЕпропущенных значения ('Canada', 'USA'), 2 пропущенных
    'Current': [True, False, False, True]}) # 4 НЕпропущенных значения

# Удаляем столбцы, в которых количество НЕпропущенных значений МЕНЬШЕ, чем thresh.
# axis=1 указывает на работу со столбцами.
# thresh=3 означает, что столбец будет сохранен, только если в нем есть как минимум 3 НЕпропущенных значения.
df = df.dropna(axis=1, thresh=3)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age  Current
# 0   Nik  33.0     True
# 1  Kate  32.0    False
# 2  Evan  36.0    False
# 3  Kyra   NaN     True

Давайте разберём, что делает приведённый выше код, так как это не очевидно с первого взгляда:

  • Параметр thresh= задаёт минимальное количество непропущенных (не NaN) значений, которые должны присутствовать в столбце.

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

Удаление столбцов Pandas, где отсутствует определённый процент записей

Более гибкий и логичный способ — задавать порог в процентах, а не в абсолютных значениях. Например, вы можете захотеть удалить все столбцы, в которых отсутствует 50% или более данных. Это можно сделать с помощью метода .isnull() в сочетании с фильтрацией.

Используя метод .isnull(), мы можем рассчитать процент пропущенных значений в каждом столбце и удалить те столбцы, где этот процент превышает заданный порог.

Давайте посмотрим, как удалить столбцы, в которых 50% и более значений отсутствуют:

# Удаление столбцов, где 50% или более значений пропущены

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],          # 1 пропущенное значение из 4 (25%)
    'Location': ['Canada', 'USA', None, None], # 2 пропущенных значения из 4 (50%)
    'Current': [True, False, False, True]}) # 0 пропущенных значений (0%)

# Определяем столбцы для удаления.
# df.isnull() создает DataFrame с булевыми значениями (True для NaN, False для существующих значений).
# .mean() вычисляет среднее значение для каждого столбца (это доля True, т.е. доля пропущенных значений).
# >= 0.5 фильтрует столбцы, где доля пропущенных значений составляет 50% или более.
# df.columns[...] возвращает имена этих столбцов.
columns_to_drop = df.columns[df.isnull().mean() >= 0.5]
# В данном случае columns_to_drop будет ['Location']

# Удаляем найденные столбцы из DataFrame.
df = df.drop(columns=columns_to_drop)

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age  Current
# 0   Nik  33.0     True
# 1  Kate  32.0    False
# 2  Evan  36.0    False
# 3  Kyra   NaN     True

Давайте разберём, что мы сделали в приведённом выше блоке кода:

  • Мы создали новую переменную columns, в которую записали результат цепочки методов .isnull() и .mean(). Это позволило нам получить процент пропущенных значений для каждого столбца.

  • Далее мы применили условие (> 0.5), в результате чего получили массив булевых значений — True означает, что столбец содержит более 50% пропусков, и его нужно удалить.

  • Затем мы использовали этот булев массив для фильтрации списка имён столбцов, чтобы получить только те, которые удовлетворяют нашему условию.

  • В данном случае был удалён только столбец 'Location', поскольку в нём как раз отсутствует 50% значений.


Как удалить столбцы Pandas после определённого столбца

Также можно использовать селектор .loc для удаления столбцов на основе их имён. Это позволяет удалять все столбцы, следующие после заданного столбца.

Метод .loc позволяет выбирать строки и столбцы по меткам и задавать диапазоны (срезы) данных. Давайте посмотрим, как удалить все столбцы после определённого столбца:

Объяснение аксессора .loc

Если мы хотим удалить все столбцы, идущие после столбца 'Age', мы можем написать следующий код:

# Удаление столбцов после определенного имени столбца

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Выбираем все строки (:) и все столбцы до (и включая) столбца 'Age'.
# Это эффективно удаляет все столбцы, которые следуют за 'Age'.
# df.loc[:, :'Age'] работает как "срез" по именам столбцов.
df = df.loc[:, :'Age']

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age
# 0   Nik  33.0
# 1  Kate  32.0
# 2  Evan  36.0
# 3  Kyra   NaN

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

Объяснение селектора iloc

Аналогично, мы можем использовать селектор .iloc для удаления столбцов, находящихся до или после заданного номера столбца.

Допустим, мы хотим удалить все столбцы, идущие до третьего столбца. Мы можем написать следующее:

# Удаление столбцов до определенного номера столбца

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Выбираем все строки (:) и все столбцы, начиная с индекса 2 (третий столбец) и до конца.
# .iloc[] используется для выбора по числовому индексу (позиции), а не по имени.
# Столбцы с индексами 0 ('Name') и 1 ('Age') будут удалены.
df = df.iloc[:, 2:]

# Выводим измененный DataFrame.
print(df)

# Returns:
#   Location  Current
# 0   Canada     True
# 1      USA    False
# 2     None    False
# 3     None     True

Селектор .iloc позволяет указать срезы строк и столбцов, которые мы хотим выбрать. Все столбцы, которые не входят в этот срез, будут удалены.

Как удалить столбцы Pandas определённого типа данных

Чтобы удалить столбцы определённого типа данных в Pandas, можно воспользоваться методом .select_dtypes(). Этот метод позволяет указать типы данных, которые вы хотите исключить из DataFrame.

Давайте рассмотрим пример, в котором удалим все столбцы с булевым типом данных (bool):

# Удаление столбцов Pandas определенного типа данных

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],          # Тип данных: object (строки)
    'Age': [33, 32, 36, None],                     # Тип данных: float64 (числа с плавающей точкой из-за None/NaN)
    'Location': ['Canada', 'USA', None, None],     # Тип данных: object (строки)
    'Current': [True, False, False, True]})        # Тип данных: bool (булевы значения)

# Выбираем только те столбцы, типы данных которых НЕ относятся к указанным.
# exclude=['boolean'] означает, что мы исключаем все столбцы с типом данных boolean.
# В данном случае это столбец 'Current'.
df = df.select_dtypes(exclude=['boolean'])

# Выводим измененный DataFrame.
print(df)

# Returns:
#    Name   Age Location
# 0   Nik  33.0   Canada
# 1  Kate  32.0      USA
# 2  Evan  36.0     None
# 3  Kyra   NaN     None

IВ приведённом выше примере мы использовали метод .select_dtypes() с параметром exclude=. Этот параметр принимает список типов данных, которые нужно исключить. Все столбцы, соответствующие указанным типам данных, будут удалены из результирующего DataFrame.

Как извлечь и удалить столбец с помощью метода .pop()

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

Давайте посмотрим, как использовать метод .pop() для удаления столбца 'Name' из DataFrame и сохранения его в виде отдельного объекта Series:

# Извлечение (Popping) столбца из Pandas DataFrame

import pandas as pd

# Создаем DataFrame со столбцами 'Name', 'Age', 'Location', 'Current'
df = pd.DataFrame({
    'Name': ['Nik', 'Kate', 'Evan', 'Kyra'],
    'Age': [33, 32, 36, None],
    'Location': ['Canada', 'USA', None, None],
    'Current': [True, False, False, True]})

# Извлекаем столбец 'Name' из DataFrame.
# Метод .pop() удаляет столбец из DataFrame *и* возвращает его как Series.
# Это удобно, когда вам нужен столбец после удаления для дальнейшей работы.
names = df.pop('Name')

# Выводим измененный DataFrame. Столбца 'Name' больше нет в df.
print(df)

# Returns:
#     Age Location  Current
# 0  33.0   Canada     True
# 1  32.0      USA    False
# 2  36.0     None    False
# 3   NaN     None     True

В приведённом выше блоке кода мы удалили столбец 'Name' с помощью метода .pop() и сохранили его в переменной names. Это означает, что столбец был удалён из DataFrame, а его данные были сохранены в виде отдельного объекта Series.


Заключение

В этом руководстве вы узнали множество полезных способов удаления столбцов из DataFrame в Pandas. Умение эффективно работать с DataFrame — важный навык как для аналитиков данных, так и для специалистов по машинному обучению. Понимание гибких возможностей, которые предоставляет Pandas при работе со столбцами, поможет сделать ваш рабочий процесс намного проще и эффективнее!

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

  • .drop() — для удаления одного или нескольких столбцов

  • .dropna() — для удаления столбцов с пропущенными значениями

  • .pop() — для удаления столбца с одновременным сохранением его данных

  • .loc и .iloc — для удаления столбцов по имени или индексу

Все эти инструменты позволяют удалять столбцы разными способами в зависимости от ваших задач.


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

Чтобы узнать больше по смежным темам, ознакомьтесь со следующими материалами:

Last updated