Распакуйте Ваши Данные с Помощью Функции 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.
# Understanding the Pandas melt() Function
import pandas as pd
pd.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name="value", col_level=None, ignore_index=True,)
Мы видим, что функция предлагает довольно много различных параметров, для всех из которых, кроме одного, предусмотрены аргументы по умолчанию. В таблице ниже представлены параметры, их аргументы по умолчанию, краткое описание и принятые значения.
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. Она была немного упрощена, чтобы упростить понимание функции.
Давайте рассмотрим как загрузить его и напечатать первые несколько записей. Набор данных содержит информацию о различных покупках типов одежды.
# Loading a Sample Pandas DataFrame
import pandas as pd
df = pd.DataFrame({'Date': ['2020-07-11','2020-09-23','2020-04-02','2020-02-28','2020-03-19'],
'Region': ['East', 'North', 'South', 'East', 'West'],
'Type': ['Children', 'Children', 'Women', 'Children', 'Women'],
'Units': [18.0, 14.0, 17.0, 26.0, 3.0],
'Sales': [306.0, 448.0, 425.0, 832.0, 33.0]})
print(df)
# Returns:
# Date Region Type Units Sales
# 0 2020-07-11 East Children 18.0 306.0
# 1 2020-09-23 North Children 14.0 448.0
# 2 2020-04-02 South Women 17.0 425.0
# 3 2020-02-28 East Children 26.0 832.0
# 4 2020-03-19 West Women 3.0 33.0
Теперь, когда у вас есть хорошее представление о данных, давайте перейдем к использованию функции.
Использование функции Pandas Melt() для разворота DataFrame
В этом разделе мы сосредоточимся на использовании параметра id_vars
функции melt
библиотеки pandas для преобразования DataFrame из широкого формата в длинный.
При преобразовании DataFrame в "плавленый" формат, id_vars
относится к идентификаторам переменных, то есть к столбцам в вашем DataFrame, которые вы хотите оставить без изменений, в то время как остальные столбцы перестраиваются из широкого формата в длинный. Эти переменные-идентификаторы предоставляют контекст для полученного "плавленого" DataFrame.
Давайте посмотрим, как мы можем использовать Pandas для "расплавления" DataFrame:
# Melting a DataFrame with id_vars
melted = pd.melt(
frame=df,
id_vars='Region'
)
print(melted)
# Returns:
# Region variable value
# 0 East Date 2020-07-11
# 1 North Date 2020-09-23
# 2 South Date 2020-04-02
# 3 East Date 2020-02-28
# 4 West Date 2020-03-19
# ...
# 15 East Sales 306.0
# 16 North Sales 448.0
# 17 South Sales 425.0
# 18 East Sales 832.0
# 19 West Sales 33.0
В указанном выше блоке кода мы уточнили, что хотим использовать id_vars='Region'
. Указывая id_vars='Region'
, мы сообщаем pandas оставить столбец ‘Region’ без изменений, в то время как остальные столбцы в DataFrame будут "расплавлены".
Аналогично, параметр id_vars=
принимает несколько меток столбцов. Давайте исследуем это в следующем разделе.
Использование нескольких переменных-идентификаторов в Pandas Melt()
Мы также можем преобразовать DataFrame, используя несколько переменных. Для использования нескольких столбцов в функции Pandas melt в id_vars=
, мы можем передать список меток столбцов. Это означает, что несколько столбцов останутся без изменений в результирующем DataFrame.
Давайте посмотрим, как мы можем "расплавить" DataFrame, сохраняя столбцы Region
и Type
без изменений, передав список меток:
# Adding a Second id_vars
melted = pd.melt(
frame=df,
id_vars=['Region', 'Type']
)
print(melted)
# Returns:
# Region Type variable value
# 0 East Children Date 2020-07-11
# 1 North Children Date 2020-09-23
# 2 South Women Date 2020-04-02
# 3 East Children Date 2020-02-28
# 4 West Women Date 2020-03-19
# 5 East Children Units 18.0
# 6 North Children Units 14.0
# 7 South Women Units 17.0
# 8 East Children Units 26.0
# 9 West Women Units 3.0
# 10 East Children Sales 306.0
# 11 North Children Sales 448.0
# 12 South Women Sales 425.0
# 13 East Children Sales 832.0
# 14 West Women Sales 33.0
В полученном выше DataFrame мы видим, что столбцы Region и Type остались без изменений, но другие столбцы были трансформированы из широкого формата в длинный.
Использование переменных значений в функции Pandas Melt()
По умолчанию Pandas будет использовать все оставшиеся столбцы в параметре value_vars=
, что означает, что все столбцы будут преобразованы. Если мы хотим преобразовать (или развернуть) только один столбец, мы можем указать метку столбца в параметре
Давайте посмотрим, как мы можем распаковать только столбец с продажами, разбитый по регионам:
# Melting a DataFrame with value_vars
melted = pd.melt(
frame=df,
id_vars='Region',
value_vars='Sales'
)
print(melted)
# Returns:
# Region variable value
# 0 East Sales 306.0
# 1 North Sales 448.0
# 2 South Sales 425.0
# 3 East Sales 832.0
# 4 West Sales 33.0
В приведенном выше примере мы сохранили столбец Регион без изменений, а данные о продажах преобразовали. Это означает, что мы получили отдельную запись для значений продаж каждого региона.
Аналогично, мы можем включить несколько столбцов в поле значений. Давайте посмотрим, как это выглядит в следующем разделе.
Использование переменных с несколькими значениями в Pandas Melt()
Передавая несколько меток столбцов в параметр value_vars=
функции melt()
Pandas, вы можете выполнить обратное преобразование нескольких колонок. Это вернет пары ключ-значение для двух столбцов, разделенные по столбцам, указанным в id_vars=
Давайте посмотрим, как это выглядит:
# Adding a Second Value Var
melted = pd.melt(
frame=df,
id_vars='Region',
value_vars=['Sales', 'Units']
)
print(melted)
# Returns:
# Region variable value
# 0 East Sales 306.0
# 1 North Sales 448.0
# 2 South Sales 425.0
# 3 East Sales 832.0
# 4 West Sales 33.0
# 5 East Units 18.0
# 6 North Units 14.0
# 7 South Units 17.0
# 8 East Units 26.0
# 9 West Units 3.0
Мы видим, что столбец Регион остался неизменным. Были добавлены два столбца (переменная и значение), представляющие пары ключ-значение для столбцов Продажи и Единицы.
В следующем разделе вы узнаете, как настроить имена переменных значений и идентификаторов, используя функцию melt()
в Pandas.
Настройка имен переменных значений и идентификаторов в Pandas Melt()
При использовании функции "расплавления" (melt
) в Pandas, по умолчанию, названия столбцов устанавливаются как variable
и value
. Чтобы изменить это поведение, можно воспользоваться параметрами var_name=
и value_name=
.
Оба эти параметра принимают одну строку в качестве входных данных. Давайте посмотрим, как мы можем настроить их, передавая в качестве аргументов Категорию и Сумму.
# Naming id_vars and value_vars
melted = pd.melt(
frame=df,
id_vars='Region',
value_vars='Sales',
var_name='Category',
value_name='Amount'
)
print(melted)
# Returns:
# Region Category Amount
# 0 East Sales 306.0
# 1 North Sales 448.0
# 2 South Sales 425.0
# 3 East Sales 832.0
# 4 West Sales 33.0
В получившемся выше DataFrame, мы добавили var_name='Категория'
и value_name='Сумма'
. Это привело к тому, что мы передали более чистые, понятные имена нашим колонкам.
Сохранение исходного индекса DataFrame в Pandas Melt()
По умолчанию Pandas перезаписывает предыдущий индекс. Можно изменить это поведение, настроив параметр ignore_index=
. По умолчанию он установлен в значение True
, но если мы изменяем его на False
, то будет сохранён оригинальный индекс. Давайте посмотрим, как это выглядит:
# Keeping the Original Index
melted = pd.melt(
frame=df,
id_vars='Region',
value_vars=['Sales', 'Units'],
ignore_index=False
)
print(melted)
# Returns:
# Region variable value
# 0 East Sales 306.0
# 1 North Sales 448.0
# 2 South Sales 425.0
# 3 East Sales 832.0
# 4 West Sales 33.0
# 0 East Units 18.0
# 1 North Units 14.0
# 2 South Units 17.0
# 3 East Units 26.0
# 4 West Units 3.0
В приведенном выше примере мы изменили параметр ignore_index=
на False
. Это означает, что был сохранен исходный индекс (что объясняет, почему мы видим повторение индексов от 0 до 4).
Использование col_level в функции плавления Pandas с многоиндексными столбцами
Параметр col_level
становится особенно полезным при работе с DataFrame, содержащими MultiIndex по столбцам. Он позволяет определить, какой уровень индекса столбца следует использовать при трансформации DataFrame с помощью функции "melt". Давайте рассмотрим это на простом примере:
# Working with col_level in Pandas melt
import pandas as pd
# Creating a sample DataFrame with MultiIndex columns
columns = pd.MultiIndex.from_tuples(
[('Sales', '2019'), ('Sales', '2020'), ('Profit', '2019'), ('Profit', '2020')],
names=['Category', 'Year']
)
data = [
[200, 250, 100, 120],
[300, 340, 150, 160],
[150, 180, 80, 90],
[250, 310, 120, 140],
]
index = ['North', 'South', 'East', 'West']
df = pd.DataFrame(data, index=index, columns=columns)
print("Original DataFrame:")
print(df)
# Melting a DataFrame with col_level
melted = pd.melt(
frame=df,
col_level='Year',
id_vars=None # In this case, we are not using id_vars
)
print(melted)
# Returns:
# Melted DataFrame:
# Year variable value
# 0 2019 NaN 200
# 1 2019 NaN 300
# 2 2019 NaN 150
# 3 2019 NaN 250
# 4 2020 NaN 250
# ...
В этом примере у нас есть 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
, ознакомившись с официальной документацией.
Last updated