Изменение порядка столбцов в Pandas: использование метода reindex и метода insert

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

Оглавление

Загрузка примера DataFrame

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

import pandas as pd

df = pd.DataFrame.from_dict(
    {
        'Name': ['Joan', 'Devi', 'Melissa', 'Dave'],
        'Age':[19, 43, 27, 32],
        'Gender': ['Female', 'Female', 'Female', 'Male'],
        'Education': ['High School', 'College', 'PhD', 'High School'],
        'City': ['Atlanta', 'Toronto', 'New York City', 'Madrid']
    }
)

print(df)

Изменение порядка столбцов с помощью прямого присваивания

Самый прямой способ изменить порядок столбцов — это использовать прямое присваивание (простите за каламбур!).

Это означает, что вы просто указываете нужный порядок столбцов в виде списка и передаёте его в квадратных скобках при повторном присваивании DataFrame.

В данный момент столбцы нашего DataFrame расположены в следующем порядке: ['Name', 'Age', 'Gender', 'Education', 'City'].

Предположим, что вы хотите поменять местами столбцы Age и Gender. Для этого можно написать следующий код:

df = df[['Name', 'Gender', 'Age', 'Education', 'City']]

print(df)

Ознакомьтесь с другими уроками Python на сайте datagy, включая наше полное руководство по стилизации Pandas и подробный обзор сводных таблиц (Pivot Tables) в Pandas!

Переупорядочивание столбцов с помощью метода Pandas .reindex()

Ещё один способ изменения порядка столбцов — использование метода .reindex() из Pandas. Он позволяет передать желаемый порядок столбцов через параметр columns=.

В следующем примере поменяем местами столбцы Education и City:

df = df.reindex(columns=['Name', 'Gender', 'Age', 'City', 'Education'])

print(df)

Переупорядочивание столбцов Pandas с помощью метода .insert()

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

Если вы знаете, на какую позицию нужно вставить столбец, метод .insert() предлагает более удобный способ для этого.

Давайте рассмотрим, как это можно сделать с помощью Python. В следующем примере переместим столбец City между столбцами Name и Gender, чтобы он стал вторым по счёту:

city = df['City']
df = df.drop(columns=['City'])
df.insert(loc=1, column='City', value=city)

print(df)

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

  1. Мы сохранили столбец df['City'] в переменную city как объект Series.

  2. Удалили этот столбец из DataFrame с помощью метода .drop().

  3. Затем вставили сохранённый столбец обратно в DataFrame на нужную позицию (в данном случае — первую) под тем же названием 'City'.

В результате получаем следующий DataFrame:

      Name           City  Gender  Age    Education
0     Joan        Atlanta  Female   19  High School
1     Devi        Toronto  Female   43      College
2  Melissa  New York City  Female   27          PhD
3     Dave         Madrid    Male   32  High School

Изменение порядка столбцов с использованием пользовательской функции

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

Давайте посмотрим, как это можно реализовать на Python:

def reorder_columns(dataframe, col_name, position):
    """Перемещает указанный столбец в заданную позицию в DataFrame.

    Args:
        dataframe (pd.DataFrame): DataFrame для обработки.
        col_name (string): Название столбца, который нужно переместить.
        position (int): Индекс (начиная с 0), куда нужно переместить столбец.

    Returns:
        pd.DataFrame: DataFrame с переупорядоченными столбцами.
    """
    temp_col = dataframe[col_name]
    dataframe = dataframe.drop(columns=[col_name])
    dataframe.insert(loc=position, column=col_name, value=temp_col)
    return dataframe

# Пример использования (предполагается, что DataFrame 'df' уже определен)
df = reorder_columns(dataframe=df, col_name='Age', position=0)

print(df)

# Возвращает:
#    Age  Name Age Group Birth City  Gender
# 0   23  Jane     18-35     London  Female
# 1   45  Melissa     35-50      Paris  Female
# 2   35   John     35-50    Toronto    Male
# 3   64   Matt       65+    Atlanta    Male

Заключение

В этой статье вы узнали, как изменять порядок столбцов в DataFrame Pandas, включая использование методов .reindex() и .insert(). В завершение мы рассмотрели пользовательскую функцию, которая поможет вам быстро переупорядочивать столбцы, если эта задача встречается у вас часто.

Если вы хотите узнать больше о методе .reindex() в Pandas, ознакомьтесь с официальной документацией по этой ссылке.

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

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

Last updated