НейроАгент

Как выбрать несколько столбцов в Pandas

Изучите лучшие методы выбора нескольких столбцов в Pandas DataFrames. Узнайте о двойных скобках, loc, iloc и методах фильтрации с практическими примерами. Освойте выбор столбцов уже сегодня!

Вопрос

Как выбрать несколько столбцов ‘a’ и ‘b’ из DataFrame Pandas ‘df’ и сохранить их в новый DataFrame ‘df1’?

Пример DataFrame:

index  a   b   c
1      2   3   4
2      3   4   5

Неудачные попытки:

python
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
НейроАгент

Чтобы выбрать несколько столбцов ‘a’ и ‘b’ из DataFrame Pandas ‘df’ и сохранить их в новый DataFrame ‘df1’, используйте метод двойных скобок: df1 = df[['a', 'b']]. Это создает новый DataFrame, содержащий только указанные столбцы, сохраняя все строки из исходного DataFrame.

Содержание

Базовые методы выбора

Метод двойных скобок

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

python
df1 = df[['a', 'b']]

Этот синтаксис создает новый DataFrame, содержащий только столбцы ‘a’ и ‘b’ из исходного DataFrame. Внешние скобки указывают на индексирование DataFrame, а внутренние определяют список имен столбцов.

Пример использования

python
import pandas as pd

# Создание примера DataFrame
data = {'a': [2, 3], 'b': [3, 4], 'c': [4, 5]}
df = pd.DataFrame(data, index=[1, 2])

# Выбор нескольких столбцов
df1 = df[['a', 'b']]

print(df1)

Результат:

   a  b
1  2  3
2  3  4

Использование метода .loc

Метод .loc позволяет выбирать данные на основе меток и особенно полезен, когда нужно выбрать одновременно строки и столбцы:

python
df1 = df.loc[:, ['a', 'b']]

Здесь : выбирает все строки, а ['a', 'b'] — указанные столбцы.

Использование метода .iloc

Метод .iloc выбирает столбцы по их целочисленной позиции. Если ‘a’ — первый столбец (индекс 0), а ‘b’ — второй столбец (индекс 1):

python
df1 = df.iloc[:, [0, 1]]

Продвинутые техники выбора

Использование метода .filter

Метод filter предоставляет более читаемый способ выбора столбцов:

python
df1 = df.filter(['a', 'b'])

Этот метод особенно полезен при работе с DataFrame, имеющими много столбцов, так как он четко выражает намерение отфильтровать столбцы.

Использование метода .copy()

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

python
df1 = df[['a', 'b']].copy()

Это рекомендуется, когда вы планируете изменять новый DataFrame, так как это предотвращает SettingWithCopyWarning, который может возникать при работе с представлениями.

Выбор столбцов с условиями

Можно комбинировать выбор столбцов с булевыми условиями:

python
# Выбор столбцов 'a' и 'b', где столбец 'a' > 2
df1 = df[df['a'] > 2][['a', 'b']]

Распространенные проблемы и решения

Почему одиночные скобки не работают

Использование одиночных скобок, таких как df['a', 'b'], вызовет KeyError, потому что pandas интерпретирует это как попытку доступа к одному столбцу с составным именем ключа.

Правильный подход:

python
# Одиночные скобки работают для одного столбца
df_a = df['a']  # Возвращает Series

# Для нескольких столбцов нужны двойные скобки
df1 = df[['a', 'b']]  # Возвращает DataFrame

Проблемы с срезами столбцов

Как показано в вашей неудачной попытке, df['a':'b'] не работает, потому что срезы столбцов со строками не поддерживаются в pandas.

Правильные подходы:

python
# Метод 1: Явный список
df1 = df[['a', 'b']]

# Метод 2: Использование loc с метками
df1 = df.loc[:, ['a', 'b']]

# Метод 3: Использование iloc с позициями
df1 = df.iloc[:, 0:2]  # Если 'a' и 'b' — первые два столбца

Устаревшие методы

Индексатор ix был устарел в pandas 0.20.0 и удален в pandas 1.0.0. Избегайте его использования в современном коде pandas.

Вместо:

python
# Устаревший метод — вызовет ошибку в современном pandas
df1 = df.ix[:, 'a':'b']

Используйте:

python
# Современный эквивалент
df1 = df.loc[:, ['a', 'b']]

Лучшие практики

Рекомендации по выбору методов

Метод Случай использования Плюсы Минусы
Двойные скобки Простой выбор столбцов Наиболее читаемый, лаконичный Ограничен только выбором столбцов
.loc Выбор на основе меток Гибкий для выбора строк/столбцов Немного более многословный
.iloc Выбор на основе позиции Полезен для числовых позиций столбцов Менее читаемы, если известны имена столбцов
.filter Фильтрация столбцов Очень читаемый Требует цепочки методов для сложных операций

Рекомендации по производительности

Для небольших и средних DataFrame различия в производительности между методами незначительны. Однако для больших DataFrame:

  • Двойные скобки и .loc обычно являются самыми быстрыми для выбора столбцов
  • .iloc может быть немного быстрее при выборе по позиции
  • .filter имеет минимальные накладные расходы, но немного медленнее прямого индексирования

Эффективность использования памяти

При работе с большими наборами данных используйте .copy() только при необходимости, чтобы избежать дублирования памяти:

python
# Для операций только на чтение представления более эффективны с точки зрения памяти
df1 = df[['a', 'b']]  # Создает представление (эффективно по памяти)

# Для изменений создайте копию
df1 = df[['a', 'b']].copy()  # Создает копию (использует больше памяти, но предотвращает SettingWithCopyWarning)

Рекомендации по производительности

Сравнение производительности разных методов

Для оптимальной производительности с большими DataFrame метод двойных скобок обычно является наиболее эффективным:

python
import pandas as pd
import numpy as np

# Создание большого DataFrame
df = pd.DataFrame(np.random.rand(100000, 20), columns=[chr(97 + i) for i in range(20)])

# Различные методы выбора
%timeit df[['a', 'b']]      # Самый быстрый
%timeit df.loc[:, ['a', 'b']] # Немного медленнее
%timeit df.filter(['a', 'b']) # Самый медленный, но наиболее читаемый

Шаблоны использования памяти

Различные методы выбора имеют разные характеристики памяти:

  • Двойные скобки: Создает представление изначально, затем копию, если изменяется
  • .loc: Всегда создает копию
  • .iloc: Всегда создает копию
  • .filter: Всегда создает копию

Понимание этих шаблонов помогает оптимизировать использование памяти для больших наборов данных.

Заключение

Чтобы выбрать несколько столбцов ‘a’ и ‘b’ из DataFrame Pandas ‘df’ и сохранить их в новый DataFrame ‘df1’, наиболее простой подход — использование двойных скобок: df1 = df[['a', 'b']]. Этот метод читаем, эффективен и широко используется в экосистеме pandas.

Ключевые выводы:

  1. Двойные скобки — предпочтительный метод для простого выбора столбцов
  2. .loc идеален, когда нужен выбор одновременно строк и столбцов
  3. .iloc лучше всего подходит при работе с позициями столбцов, а не с именами
  4. .filter обеспечивает отличную читаемость для операций фильтрации столбцов
  5. Всегда используйте .copy(), когда нужно изменять результирующий DataFrame

Понимание этих различных подходов и их вариантов использования позволяет выбрать наиболее подходящий метод для ваших конкретных задач манипулирования данными.

Источники

  1. How to Select Multiple Columns in Pandas (With Examples) - Statology
  2. Select multiple columns in a Pandas DataFrame - Tutorialspoint
  3. How to select multiple columns in a pandas dataframe - GeeksforGeeks
  4. How to Select Multiple Columns in Pandas DataFrame - Ubiq BI
  5. Pandas Create New DataFrame By Selecting Specific Columns - Spark By Examples
  6. How do I select a subset of a DataFrame? — pandas documentation
  7. Pandas Dataframe loc, iloc & brackets examples - Analytics Yogi
  8. Pandas iloc and loc – quickly select data in DataFrames - Shane Lynn