Как выбрать несколько столбцов ‘a’ и ‘b’ из DataFrame Pandas ‘df’ и сохранить их в новый DataFrame ‘df1’?
Пример DataFrame:
index a b c
1 2 3 4
2 3 4 5
Неудачные попытки:
df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']
Чтобы выбрать несколько столбцов ‘a’ и ‘b’ из DataFrame Pandas ‘df’ и сохранить их в новый DataFrame ‘df1’, используйте метод двойных скобок: df1 = df[['a', 'b']]. Это создает новый DataFrame, содержащий только указанные столбцы, сохраняя все строки из исходного DataFrame.
Содержание
- Базовые методы выбора
- Продвинутые техники выбора
- Распространенные проблемы и решения
- Лучшие практики
- Рекомендации по производительности
Базовые методы выбора
Метод двойных скобок
Наиболее простой и часто используемый метод — передача списка имен столбцов в двойных квадратных скобках:
df1 = df[['a', 'b']]
Этот синтаксис создает новый DataFrame, содержащий только столбцы ‘a’ и ‘b’ из исходного DataFrame. Внешние скобки указывают на индексирование DataFrame, а внутренние определяют список имен столбцов.
Пример использования
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 позволяет выбирать данные на основе меток и особенно полезен, когда нужно выбрать одновременно строки и столбцы:
df1 = df.loc[:, ['a', 'b']]
Здесь : выбирает все строки, а ['a', 'b'] — указанные столбцы.
Использование метода .iloc
Метод .iloc выбирает столбцы по их целочисленной позиции. Если ‘a’ — первый столбец (индекс 0), а ‘b’ — второй столбец (индекс 1):
df1 = df.iloc[:, [0, 1]]
Продвинутые техники выбора
Использование метода .filter
Метод filter предоставляет более читаемый способ выбора столбцов:
df1 = df.filter(['a', 'b'])
Этот метод особенно полезен при работе с DataFrame, имеющими много столбцов, так как он четко выражает намерение отфильтровать столбцы.
Использование метода .copy()
Чтобы убедиться, что вы работаете с копией, а не с представлением исходного DataFrame:
df1 = df[['a', 'b']].copy()
Это рекомендуется, когда вы планируете изменять новый DataFrame, так как это предотвращает SettingWithCopyWarning, который может возникать при работе с представлениями.
Выбор столбцов с условиями
Можно комбинировать выбор столбцов с булевыми условиями:
# Выбор столбцов 'a' и 'b', где столбец 'a' > 2
df1 = df[df['a'] > 2][['a', 'b']]
Распространенные проблемы и решения
Почему одиночные скобки не работают
Использование одиночных скобок, таких как df['a', 'b'], вызовет KeyError, потому что pandas интерпретирует это как попытку доступа к одному столбцу с составным именем ключа.
Правильный подход:
# Одиночные скобки работают для одного столбца
df_a = df['a'] # Возвращает Series
# Для нескольких столбцов нужны двойные скобки
df1 = df[['a', 'b']] # Возвращает DataFrame
Проблемы с срезами столбцов
Как показано в вашей неудачной попытке, df['a':'b'] не работает, потому что срезы столбцов со строками не поддерживаются в pandas.
Правильные подходы:
# Метод 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.
Вместо:
# Устаревший метод — вызовет ошибку в современном pandas
df1 = df.ix[:, 'a':'b']
Используйте:
# Современный эквивалент
df1 = df.loc[:, ['a', 'b']]
Лучшие практики
Рекомендации по выбору методов
| Метод | Случай использования | Плюсы | Минусы |
|---|---|---|---|
| Двойные скобки | Простой выбор столбцов | Наиболее читаемый, лаконичный | Ограничен только выбором столбцов |
.loc |
Выбор на основе меток | Гибкий для выбора строк/столбцов | Немного более многословный |
.iloc |
Выбор на основе позиции | Полезен для числовых позиций столбцов | Менее читаемы, если известны имена столбцов |
.filter |
Фильтрация столбцов | Очень читаемый | Требует цепочки методов для сложных операций |
Рекомендации по производительности
Для небольших и средних DataFrame различия в производительности между методами незначительны. Однако для больших DataFrame:
- Двойные скобки и
.locобычно являются самыми быстрыми для выбора столбцов .ilocможет быть немного быстрее при выборе по позиции.filterимеет минимальные накладные расходы, но немного медленнее прямого индексирования
Эффективность использования памяти
При работе с большими наборами данных используйте .copy() только при необходимости, чтобы избежать дублирования памяти:
# Для операций только на чтение представления более эффективны с точки зрения памяти
df1 = df[['a', 'b']] # Создает представление (эффективно по памяти)
# Для изменений создайте копию
df1 = df[['a', 'b']].copy() # Создает копию (использует больше памяти, но предотвращает SettingWithCopyWarning)
Рекомендации по производительности
Сравнение производительности разных методов
Для оптимальной производительности с большими DataFrame метод двойных скобок обычно является наиболее эффективным:
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.
Ключевые выводы:
- Двойные скобки — предпочтительный метод для простого выбора столбцов
.locидеален, когда нужен выбор одновременно строк и столбцов.ilocлучше всего подходит при работе с позициями столбцов, а не с именами.filterобеспечивает отличную читаемость для операций фильтрации столбцов- Всегда используйте
.copy(), когда нужно изменять результирующий DataFrame
Понимание этих различных подходов и их вариантов использования позволяет выбрать наиболее подходящий метод для ваших конкретных задач манипулирования данными.
Источники
- How to Select Multiple Columns in Pandas (With Examples) - Statology
- Select multiple columns in a Pandas DataFrame - Tutorialspoint
- How to select multiple columns in a pandas dataframe - GeeksforGeeks
- How to Select Multiple Columns in Pandas DataFrame - Ubiq BI
- Pandas Create New DataFrame By Selecting Specific Columns - Spark By Examples
- How do I select a subset of a DataFrame? — pandas documentation
- Pandas Dataframe loc, iloc & brackets examples - Analytics Yogi
- Pandas iloc and loc – quickly select data in DataFrames - Shane Lynn