Упрощение процесса изменения порядка столбцов в DataFrame

Обзор

Есть несколько причин, по которым вы можете изменить порядок столбцов в Pandas.

  • Вам нужна целевая переменная в крайнем правом углу.
  • Вы хотите отслеживать свой прогресс в подготовке данных столбец за столбцом, последовательно перемещая их по мере работы с данными.
  • Вы создали несколько тестовых столбцов (поспешно)… теперь пришло время навести порядок.
  • У вас есть интересующая вас переменная, скрытая под номером столбца 332 из 400. Если она находится в нулевой позиции, это улучшит читаемость вашего вывода.

Есть несколько способов выполнить эту задачу. Одни лучше других.

В этой статье представлено несколько примеров, в которых изящно используются нативные методы Python list.remove() и list.insert().

Данные + настройка

Для удобства эта статья ссылается на примеры данных Seaborn и Stata (все они доступны в Интернете). Мы начинаем со стандартной настройки, импортируя Pandas, Seaborn, а затем загружая данные (auto2.dta и Tips.csv). См. раздел лицензирования данных в конце этой статьи.

import pandas as pd
import seaborn as sns
cars = pd.read_stata('http://www.stata-press.com/data/r15/' + /
                      'auto2.dta')
tips = sns.load_dataset('tips')

Автомобили: переместить цену в крайнее левое положение

При первой загрузке вы найдете цену в крайнем левом углу данных об автомобилях.

Нашей задачей будет вывести цену на первую позицию в наборе данных. Нам нужно всего четыре строки кода.

# Get the column names in their current order.
new_order = cars.columns.to_list()
# Remove price from the list.
new_order.remove('price')
# Place price at the beginning of the list.
new_order.insert(0, 'price')
# Redefine the data frame with the new column order.
cars = cars[new_order]

Теперь мы находим цену в крайнем левом столбце (первый столбец — или также нулевой столбец).

Советы: переместите день + время в крайнее левое положение

Перемещение двух столбцов одновременно (показано ниже) почти такое же, как перемещение одного столбца (показано выше). Когда эти данные загружаются впервые, мы видим день и время в позициях 4 и 5 соответственно.

Мы хотим переместить их в крайние левые позиции 0 и 1. В процессе мы также изменим их порядок, чтобы время было первым и в позиции 0, а день был вторым и в позиции 1.

Методы list.remove() и list.insert() не принимают списки в качестве аргумента. Это означает, что перемещение нескольких столбцов требует соответствующего увеличения кода.

# Get the column names in their current order.
new_order = cars.columns.to_list()
# Remove the columns from their original positions.
new_order.remove('day')
new_order.remove('time')
# Add the columns back but in desired positions.
new_order.insert(0, 'day')
new_order.insert(0, 'time')

Результаты показаны здесь.

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

Заключение

В этой статье продемонстрированы два примера кода, которые позволяют быстро изменить порядок фрейма данных Pandas. Другие инструменты предоставляют готовые решения, обеспечивающие эту функциональность. В Pandas интересно то, что вы должны изобретать свои собственные способы.

Я ранее писал:

После слияния нескольких источников данных удобно иметь метод, который может быстро упорядочивать и переупорядочивать столбцы. Это обычная любезность для будущих ученых, которые рассмотрят вашу работу. Если мы разместим наиболее важные столбцы слева, другие потратят меньше времени на поиск информации, необходимой для понимания нашей работы. Этот дополнительный шаг также может быть полезен для нас самих, когда мы знаем, что вернемся к нашей работе для дальнейшего использования. (Источник: Изменение порядка столбцов Pandas DataFrame: отрицательные отзывы о стандартных решениях)

Какие решения вы использовали для перемещения столбцов?

Спасибо за прочтение

Спасибо за прочтение. Присылайте мне свои мысли и идеи. Вы можете написать просто, чтобы сказать привет. И если вам действительно нужно сказать мне, как я ошибся, я с нетерпением жду скорого разговора. Твиттер: @adamrossnelson | LinkedIn: Адам Росс Нельсон| Facebook: Адам Росс Нельсон.

Лицензирование данных

Лицензия на морские данные. Seaborn предоставляет эти данные для обучения, обучения, демонстрации и тестирования. Подробнее об этих данных можно прочитать в документации или в сопутствующем репозитории.

Статистическая лицензия. Stata предоставляет эти и другие данные для целей обучения, обучения, демонстрации и тестирования. Подробнее об этих и других данных вы можете прочитать в этой предыдущей статье.