Изменение порядка столбцов и перемещение столбцов на передний план в pandas DataFrames

Вступление

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

В сегодняшней статье мы собираемся обсудить, как изменить порядок столбцов в пандах DataFrames, используя

  • нарезка исходного кадра - особенно актуально, когда вам нужно изменить порядок большинства столбцов
  • insert() метод - если вы хотите вставить один столбец в указанный индекс
  • set_index() - если вам нужно переместить столбец в начало фрейма данных
  • и reindex() метод - наиболее актуален для случаев, когда вы можете указать индексы столбцов в том порядке, в котором они должны отображаться (например, в алфавитном порядке)

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

import pandas as pd
df = pd.DataFrame({
    'colA':[1, 2, 3], 
    'colB': ['a', 'b', 'c'],
    'colC': [True, False, False],
    'colD': [10, 20, 30],
})
print(df)
#    colA colB   colC  colD
# 0     1    a   True    10
# 1     2    b  False    20
# 2     3    c  False    30

Использование нарезки

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

df = df[['colD', 'colB', 'colC', 'colA']]
print(df)
#    colD colB   colC  colA
# 0    10    a   True     1
# 1    20    b  False     2
# 2    30    c  False     3

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

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

Если вам нужно вставить столбец в DataFrame в указанном месте, тогда pandas.DataFrame.insert() подойдет. Однако вы должны убедиться, что столбец сначала извлечен из исходного DataFrame, иначе будет выведено ValueError со следующим сообщением:

ValueError: cannot insert column_name, already exists

Следовательно, перед вызовом insert() нам сначала нужно выполнить pop() над DataFrame, чтобы удалить столбец из исходного DataFrame и сохранить его информацию. Например, если мы хотим разместить colD в качестве первого столбца кадра, нам сначала нужно pop() столбец, а затем вставить его обратно, на этот раз по желаемому индексу.

col = df.pop("colD")
df.insert(0, col.name, col)

print(df)
#    colD  colA colB   colC
# 0    10     1    a   True
# 1    20     2    b  False
# 2    30     3    c  False

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

Если вы хотите переместить столбец в начало фрейма данных pandas, тогда set_index() - ваш друг.

Сначала вы указываете столбец, который мы хотим переместить на передний план, как индекс DataFrame, а затем сбрасываете индекс, чтобы старый индекс был добавлен в качестве столбца и использовался новый последовательный индекс. Опять же, обратите внимание, как мы pop() столбец так, что он удаляется перед добавлением в качестве индекса. Это необходимо, иначе произойдет конфликт имен при попытке сделать старый индекс первым столбцом DataFrame.

df.set_index(df.pop('colD'), inplace=True)
#       colA colB   colC 
# colD
# 10       1    a   True
# 20       2    b  False
# 30       3    c  False
df.reset_index(inplace=True)
#    colD  colA colB   colC
# 0    10     1    a   True
# 1    20     2    b  False
# 2    30     3    c  False

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

Наконец, если вы хотите указать индексы столбцов в том порядке, в котором вы хотите, чтобы они отображались (например, в алфавитном порядке), вы можете использовать метод reindex() для согласования DataFrame с новым индексом.

Например, предположим, что нам нужно расположить имена столбцов в алфавитном порядке по убыванию.

df = df.reindex(columns=sorted(df.columns, reverse=True))
#    colD   colC colB  colA
# 0    10   True    a     1
# 1    20  False    b     2
# 2    30  False    c     3

Обратите внимание, что приведенное выше эквивалентно

df.reindex(sorted(df.columns, reverse=True), axis='columns')

Последние мысли

В сегодняшнем кратком руководстве мы обсудили, как изменить порядок столбцов в фреймах данных pandas разными способами. Убедитесь, что вы выбрали правильный метод, исходя из ваших конкретных требований.

Вам также может понравиться