Питон

Python Pandas: 4 удивительных способа переименовать столбцы DataFrame

Знайте и осваивайте эти способы борьбы с грязными именами столбцов в Pandas DataFrame

pandas — это быстрый, мощный и гибкий ! 🔋

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

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

Сегодня я собираюсь продемонстрировать 4 лучших способа легко изменить имена столбцов Pandas DataFrame.

📍 Примечание. Я использую самостоятельно созданный Dummy_Sales_Data, который вы можете бесплатно получить в моем репозитории Github и использовать его для другие ваши практические проекты!

Давайте сначала импортируем набор данных,

import pandas as pd
df = pd.read_csv("Dummy_Sales_Data_v1.csv")
df.head()

Это простой набор данных 10000 x 12, который я создал как часть моей статьи Faker: удивительная и безумно полезная библиотека Python. 📚

Вы можете загрузить полный блокнот со всеми этими примерами в конце этого чтения!

Хорошо, приступим..

Прежде чем углубляться в другие методы, давайте начнем с самого простого и прямого метода.

pandas.DataFrame.rename() — Использование словаря

Это функция DataFrame, которая в основном используется для изменения меток оси. Здесь слово — ось — относится как к строкам, так и к столбцам в зависимости от того, какое значение мы установили для параметра axis в этой функции.

Поскольку нас больше интересует, как изменить имя столбца, давайте сосредоточимся на нем. Итак, важным параметром для нас в функции .rename() является columns, как показано ниже.

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

df.rename(columns={"Status": "Order_Status",
                   "Quantity": "Order_Quantity"}).head()

Как видите, я передал словарь в столбцах параметров в df.rename(), где ключи — это Статус и Количество, которые старые имена столбцов. И значения — это Order_Status и Order_Quantity, которые являются новыми именами столбцов.

📍 Примечание. df.rename() состоит из параметра inplace, который по умолчанию имеет значение False. Чтобы сохранить изменения в именах столбцов, необходимо сделать inplace = True.

Поскольку я не хотел сохранять измененные имена столбцов, я использовал метод .head(), чтобы посмотреть, как это выглядит только с измененным именем столбца.

📍Примечание. Перед внесением inplace = True в какую-либо функцию всегда рекомендуется использовать .head(), чтобы посмотреть, как выглядит изменение.

Следующие методы представляют собой небольшую вариацию функции .rename().

pandas.DataFrame.rename() — Использование функции

Как и в первом методе выше, мы по-прежнему будем использовать параметр columns в функции .rename(). Но вместо того, чтобы передавать пары «старое имя — новое имя» ключ-значение, мы также можем передать функцию параметру columns.

например, преобразовать все имена столбцов в верхний регистр с помощью этого трюка довольно просто, как показано ниже.

df.rename(columns=str.upper).head()

Я просто использовал строковую функцию str.upper, чтобы сделать все имена столбцов в верхнем регистре, как вы можете видеть на рисунке выше.

Полный список строковых функций, которые можно здесь использовать, приведен в Пять обязательных для понимания строковых методов в Python📚

Таким образом, все имена столбцов будут изменены за один раз. Однако это можно сделать гибким, используя пользовательские функции.

Да!! Вы можете передать любую пользовательскую функцию параметру columns, чтобы изменить имена столбцов на основе функции.

Например, вы можете написать простую функцию, чтобы разделить имена столбцов на знаке подчеркивания ( _ ) и выбрать из него только 1-ю часть. А затем передайте этой функции столбцы, как показано ниже. 🔽

def function_1(x):
    x = x.split('_')[0]
    return x
df.rename(columns=function_1).head()

Измененные имена столбцов можно заметить в приведенном выше выводе. В соответствии с применяемой функцией имена столбцов, содержащие _, разбиваются на _, и только 1-я его часть назначается в качестве нового имени столбца, например. Product_Category становится Product.

И если это простая функция, подобная приведенной выше, вы также можете использовать лямбда-функцию. ♻️

Забегая вперед, давайте рассмотрим еще один метод переименования столбцов.

pandas.DataFrame.columns

На самом деле, это метод возврата списка всех имен столбцов DataFrame, например

df.columns

Однако обратным способом мы можем передать список имен новых столбцов в df.columns, и тогда новые имена столбцов будут присвоены DataFrame.

Вот как это работает.. 🔽

df.columns = ['OrderID', 'Order_Quantity',
              'UnitPrice(USD)', 'Order_Status',
              'OrderDate', 'Product_Category',
              'Sales_Manager', 'Shipping_Cost(USD)',
              'Delivery_Time(Days)', 'Shipping_Address',
              'Product_Code', 'OrderCode']
df.head()

Как видите, я присвоил список имен новых столбцов df.columns, и имена всех столбцов изменились соответствующим образом.

📍 Примечание. Вам необходимо передать имена всех столбцов. Длина этого списка имен должна быть точно равна общему количеству столбцов в DataFrame.

И без каких-либо других опций, таких как inplace, имена столбцов изменяются напрямую и навсегда, этот метод немного рискован.

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

📍 Примечание. Последовательность списка имен столбцов должна быть такой же, как у вас есть столбцы в DataFrame, иначе имена столбцов могут быть назначены неправильно.

Если учесть все вышеперечисленные пункты, это лучший способ изменить все столбцы за один раз.

Давайте посмотрим последний метод.

pandas.DataFrame.set_axis

Этот метод изначально использовался для установки меток на оси DataFrame, т. е. этот метод можно использовать для маркировки столбцов, а также строк.

Все, что вам нужно сделать, это просто передать список имен столбцов в функцию .set_axis() и указать axis = 1 для переименования столбцов, как показано ниже 🔽

df.set_axis(['A', 'B', 'C', 'D', 'E', 'F',
             'G', 'H', 'I', 'J', 'K', 'L'], axis=1).head()

Вот как вы можете изменить имена столбцов для всех или некоторых столбцов. Здесь также нужно учитывать все моменты, которые я упомянул в предыдущем методе.

Однако .set_axis() является более безопасной версией предыдущего метода df.columns, поскольку он содержит параметр inplace. Таким образом, даже перед применением изменений вы можете предварительно просмотреть будущие изменения.

И чтобы сохранить измененные имена столбцов, просто сделайте inplace = True.

Это все об изменении имен столбцов!!

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

💡 Вы можете изучить материалы Medium, Став участником Medium. Поверьте мне, вы можете получить неограниченный доступ к новостям и ежедневным интересным дайджестам Medium. Я получу небольшую часть вашего гонорара и никаких дополнительных затрат для вас.

💡 Не забудьте Подписаться на мою рассылку, чтобы получать первые экземпляры моих статей.

📚 Вот полный блокнот со всеми этими методами переименования столбцов.

Спасибо, что прочитали!