Распакуйте Ваши Данные с Помощью Функции Melt в Pandas

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

Это руководство предоставляет ясное и увлекательное введение в эту мощную функцию, насыщенное примерами, которые охватывают всё от основ до продвинутого использования.

К концу этого руководства вы научитесь следующему:

  • Что такое функция Pandas melt() и ее цель в изменении данных

  • Как настроить и использовать функцию плавления pandas с пошаговым описанием ее синтаксиса и параметров.

  • Различие между переменными-идентификаторами, переменными-значениями и измеряемыми переменными, а также как выбрать правильную комбинацию для ваших нужд.

  • Как настроить имена столбцов в объединенном DataFrame, используя id_vars и value_vars

  • Передовые методы плавления, такие как работа с MultiIndex DataFrames и интеграция плавления с другими операциями pandas.

Оглавление

Понимание функции Pandas Melt()

Функция melt() в Pandas используется для преобразования DataFrame из широкого формата в длинный формат.

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

Давайте погрузимся в изучение синтаксиса функции Pandas melt.

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

Параметр
Аргумент по умолчанию
Описание
Принятые значения

frame

Входной DataFrame, который нужно расплавить

A Pandas DataFrame

id_vars

None

Переменные идентификатора, которые останутся неизменными в результирующем DataFrame.

Scalar/list of Scalars/column index (integer)

value_vars

None

Переменные для преобразования в длинный формат

Scalar/list of Scalars/column index (integer)

var_name

None

Пользовательское имя для результирующего столбца «переменная».

A string representing the new column name

value_name

“value”

Пользовательское имя для результирующего столбца «значение».

A string representing the new column name

col_level

None

Для MultiIndex DataFrames — уровень объединяемого столбца.

An integer/string/column index

ignore_index

True

Добавляет новый индекс вместо сохранения предыдущей структуры индекса.

Boolean: True/False

По умолчанию, когда параметры id_vars, value_vars и col_level не указаны, Pandas предполагает, что все столбцы, не являющиеся идентификаторами, являются value_vars, и проводит преобразование всего DataFrame.

Давайте теперь погрузимся в то, как мы можем использовать функцию melt() в Pandas, рассматривая различные примеры.

Загрузка образца DataFrame Pandas

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

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

Теперь, когда у вас есть хорошее представление о данных, давайте перейдем к использованию функции.

Использование функции Pandas Melt() для разворота DataFrame

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

При преобразовании DataFrame в "плавленый" формат, id_vars относится к идентификаторам переменных, то есть к столбцам в вашем DataFrame, которые вы хотите оставить без изменений, в то время как остальные столбцы перестраиваются из широкого формата в длинный. Эти переменные-идентификаторы предоставляют контекст для полученного "плавленого" DataFrame.

Давайте посмотрим, как мы можем использовать Pandas для "расплавления" DataFrame:

В указанном выше блоке кода мы уточнили, что хотим использовать id_vars='Region'. Указывая id_vars='Region', мы сообщаем pandas оставить столбец ‘Region’ без изменений, в то время как остальные столбцы в DataFrame будут "расплавлены".

Аналогично, параметр id_vars= принимает несколько меток столбцов. Давайте исследуем это в следующем разделе.

Использование нескольких переменных-идентификаторов в Pandas Melt()

Мы также можем преобразовать DataFrame, используя несколько переменных. Для использования нескольких столбцов в функции Pandas melt в id_vars=, мы можем передать список меток столбцов. Это означает, что несколько столбцов останутся без изменений в результирующем DataFrame.

Давайте посмотрим, как мы можем "расплавить" DataFrame, сохраняя столбцы Region и Type без изменений, передав список меток:

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

Использование переменных значений в функции Pandas Melt()

По умолчанию Pandas будет использовать все оставшиеся столбцы в параметре value_vars=, что означает, что все столбцы будут преобразованы. Если мы хотим преобразовать (или развернуть) только один столбец, мы можем указать метку столбца в параметре

Давайте посмотрим, как мы можем распаковать только столбец с продажами, разбитый по регионам:

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

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

Использование переменных с несколькими значениями в Pandas Melt()

Передавая несколько меток столбцов в параметр value_vars= функции melt() Pandas, вы можете выполнить обратное преобразование нескольких колонок. Это вернет пары ключ-значение для двух столбцов, разделенные по столбцам, указанным в id_vars=

Давайте посмотрим, как это выглядит:

Мы видим, что столбец Регион остался неизменным. Были добавлены два столбца (переменная и значение), представляющие пары ключ-значение для столбцов Продажи и Единицы.

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

Настройка имен переменных значений и идентификаторов в Pandas Melt()

При использовании функции "расплавления" (melt) в Pandas, по умолчанию, названия столбцов устанавливаются как variable и value. Чтобы изменить это поведение, можно воспользоваться параметрами var_name= и value_name=.

Оба эти параметра принимают одну строку в качестве входных данных. Давайте посмотрим, как мы можем настроить их, передавая в качестве аргументов Категорию и Сумму.

В получившемся выше DataFrame, мы добавили var_name='Категория' и value_name='Сумма'. Это привело к тому, что мы передали более чистые, понятные имена нашим колонкам.

Сохранение исходного индекса DataFrame в Pandas Melt()

По умолчанию Pandas перезаписывает предыдущий индекс. Можно изменить это поведение, настроив параметр ignore_index=. По умолчанию он установлен в значение True, но если мы изменяем его на False, то будет сохранён оригинальный индекс. Давайте посмотрим, как это выглядит:

В приведенном выше примере мы изменили параметр ignore_index= на False. Это означает, что был сохранен исходный индекс (что объясняет, почему мы видим повторение индексов от 0 до 4).

Использование col_level в функции плавления Pandas с многоиндексными столбцами

Параметр col_level становится особенно полезным при работе с DataFrame, содержащими MultiIndex по столбцам. Он позволяет определить, какой уровень индекса столбца следует использовать при трансформации DataFrame с помощью функции "melt". Давайте рассмотрим это на простом примере:

В этом примере у нас есть DataFrame с мультииндексными столбцами, где ‘Category’ (Уровень 0) представляет собой ‘Sales’ (Продажи) и ‘Profit’ (Прибыль), а ‘Year’ (Уровень 1) представляет ‘2019’ и ‘2020’. Когда мы устанавливаем col_level='Year', функция melt в pandas использует уровень ‘Year’ мультииндекса в качестве столбца ‘variable’ в результирующем «расплавленном» DataFrame.

В кратце, параметр col_level позволяет управлять процессом "расплавления" в DataFrames с мультииндексными колонками, предоставляя вам больше контроля над тем, как ваши данные перестраиваются при использовании функции melt в pandas.

Заключение

Поздравляем с достижением конца этого всестороннего руководства по функции Pandas melt! Мы рассмотрели широкий спектр концепций, инструментов и примеров, которые исследовали многие возможности этого мощного инструмента для манипулирования данными. Чтобы подвести итог, вот что мы узнали:

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

  • Как настроить и эффективно использовать функцию плавления Pandas, углубляясь в синтаксис и параметры функции плавления

  • Определение разницы между переменными-идентификаторами, переменными-значениями и измеряемыми переменными, а также то, почему выбор правильной комбинации id_vars и value_vars имеет решающее значение.

  • Настройка имен столбцов в объединенном DataFrame с использованием параметров id_vars, value_vars, var_name и value_name.

  • Передовые методы плавления, такие как работа с MultiIndex DataFrames и интеграция функции плавления с другими операциями Pandas.

С полученными знаниями из этого учебника вы теперь прекрасно подготовлены для решения сложных задач по манипулированию данными и их преобразованию для улучшения обработки и анализа. Продолжайте изучать дополнительные ресурсы и практиковать свои навыки, чтобы стать экспертом в перестройке данных с использованием pandas. Помните, ключ к освоению любого инструмента - это постоянная практика и экспериментирование. Счастливого преобразования данных!

Узнайте больше о функции melt, ознакомившись с официальной документацией.

Последнее обновление