Как в pandas Python создать новый DataFrame из столбцов

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите извлечь определённые столбцы из вашего DataFrame df и создать новый DataFrame, примените метод .copy() из библиотеки pandas. Это можно сделать так:

Python
Скопировать код
new_df = df[['A', 'B']].copy()

Этот способ позволяет быстро и просто скопировать столбцы 'A' и 'B' из df в новый DataFrame new_df. Готово!

Кинга Идем в IT: пошаговый план для смены профессии

Расширяем свои знания: продвинутые способы копирования столбцов

Теперь, освоив основы, настал момент улучшить наши навыки. Рассмотрим несколько продвинутых методов копирования столбцов.

Используем .copy(), чтобы избежать предупреждений

При создании нового DataFrame в виде подмножества исходного pandas рекомендует использовать .copy(), чтобы уберечься от испуга встречи с SettingWithCopyWarning. Это помогает создать полную копию данных и предотвращает нежелательные изменения в оригинальном DataFrame.

Python
Скопировать код
# Копируем столбцы A, B и C. Таким образом, df2 никак не связан с df1 и не создаст проблем.
df2 = df1[['A', 'B', 'C']].copy()

Нам нужен только нужный фильтр

Если вы хотите выбирать столбцы по их названиям, можете воспользоваться функцией filter().

Python
Скопировать код
# df.select_dtypes(include=[np.number]) выбирает все числовые столбцы. Не включайте столбец, если не уверены, что он вам нужен!
new_df = df.filter(df.select_dtypes(include=[np.number]).columns)

Умеем отказываться от лишнего

Иногда необходимость удаления столбца может создать сложности. Но метод drop() придет на помощь!

Python
Скопировать код
# Столбец B вы не заслуживает нашего внимания? Избавляемся от него. Нам не нужна в данных негативная энергия (столбца B).
new_df = df.drop('B', axis=1)

Без названия, только номер: использование iloc

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

Python
Скопировать код
# Я могу быть анонимным, но вы знаете, где меня найти.
new_df = df.iloc[:, [0, 2, 3]].copy()  # Предполагая, что 'A', 'C', 'D' – это первый, третий и четвёртый столбцы.

Доверимся управлением памяти pandas

Не нужно углубляться в управление памятью, когда перед вами стоит задача работы с большим DataFrame. Для больших наборов данных лучше использовать методы filter() и iloc().

Визуализация

Давайте наглядно проиллюстрируем процесс копирования. Возьмем за пример инструментальный ящик (🧰). В нем есть различные инструменты, но нам по каким-то причинам нужны только отвёртки:

Markdown
Скопировать код
Оригинальный инструментальный ящик (🧰): [🔨, 🪓, 🔧, 🪛, 🗡️, 🪚]

Вы решили сделать свою работу удобнее и создали новый инструментальный ящик:

Markdown
Скопировать код
Новый инструментальный ящик: [🪛]

Здесь отвёртки (🪛) символизируют наши столбцы, а новый инструментальный ящик 🆕🧰 — это ваш новый DataFrame.

Практическое руководство: выбор столбцов в реальной работе

Теперь перейдем к практическим решениям задач. Вот как можно выбрать столбцы в реальной работе.

Быстрый выбор столбцов по типу данных

У опытного программиста времени всегда не хватает, поэтому он ценит эффективность. Выберем столбцы определенного типа, например, числовые, с помощью метода select_dtypes():

Python
Скопировать код
numeric_cols = df.select_dtypes(include=[np.number]).columns.tolist()
new_df = df[numeric_cols]

Сохраняем память

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

Python
Скопировать код
cols_to_keep = ['A', 'B', 'F']  # B и F – это столбцы, которые мы решили оставить
new_df = df[cols_to_keep]

Гибкий и динамический выбор столбцов

Дайте столбцам работать на вас. Выбирайте столбцы в зависимости от задач:

Python
Скопировать код
# Ваш друг: Эй, можешь ли ты выбрать все столбцы, которые связаны с 'sales'?
# Вы, гуру Python: Без проблем!
cols_to_select = [col for col in df.columns if 'sales' in col]
new_df = df[cols_to_select].copy()

Полезные материалы

  1. DataFrame в pandas: облегчаем работу с данными – Real PythonУчитесь выделять столбцы в pandas.
  2. pandas.DataFrame.copy — pandas 2.2.0 documentation – Официальное руководство pandas по функции копирования copy.
  3. Типы данных в Pandas – Practical Business PythonПодробно о типах данных в pandas и многом другом.
  4. Глубокое и поверхностное копирование объектов в Python – Real Python – Изучите разницу между глубоким и поверхностным копированием объектов. Сюрприз: это глубже, чем вы думаете!
  5. Шпаргалка по pandas — Python для Data Science – DataquestШпаргалка по pandas. Незаменимый помощник в работе со столбцами.
  6. Булева индексация в Pandas – GeeksforGeeks – Освойте фильтрацию с булевой индексацией в pandas DataFrame.
  7. Pandas для начинающих – LearnDataSci – Всё о pandas: Полное руководство для начинающих.