Curso
O formato wide é fácil de ler, mas muitas tarefas de análise e visualização funcionam melhor com dados no formato long.
A função pandas.melt() remodela um DataFrame ao transformar uma ou mais colunas em linhas, mantendo intactas as colunas identificadoras selecionadas. Isso deixa seus dados mais fáceis de filtrar, agrupar, visualizar e analisar.
Neste tutorial, vou mostrar como usar a função pandas.melt(). Também vou comparar com opções como pivot(), stack() e wide_to_long(). Se você está começando em Python, recomendo fazer o nosso Introduction to Python curso, que cobre habilidades como tipos de dados, listas, funções básicas e pacotes.
Como usar pandas.melt()
A função pandas.melt() converte um DataFrame do formato wide para o formato long, transformando os nomes das colunas em valores de uma nova coluna.
Sua sintaxe é a seguinte:
pandas.melt(
frame,
id_vars=None,
value_vars=None,
var_name=None,
value_name="value",
col_level=None,
ignore_index=True
)
Onde:
-
frame: o DataFrame a ser remodelado. Só é obrigatório ao usarpandas.melt(). -
id_vars: coluna ou lista de colunas que devem permanecer inalteradas. Essas colunas identificam cada linha após a transformação. -
value_vars: coluna ou lista de colunas a serem "desempilhadas". Se omitido, o pandas derrete todas as colunas que não estão emid_vars. -
var_name: nome da nova coluna que armazena os nomes originais das colunas. O padrão é"variable"se não for especificado. -
value_name: nome da nova coluna que armazena os valores. O padrão é"value"se não for especificado. -
col_level: opcional; define qual nível derreter ao trabalhar com colunas MultiIndex. -
ignore_index: seTrue(padrão), cria um novo índice sequencial. SeFalse, preserva o índice original.
Vou te mostrar um exemplo para ilustrar como a sintaxe acima remodela os dados.
Suponha que você tenha o conjunto de dados abaixo, em que as vendas mensais de cada produto estão em colunas separadas.

Você pode usar pandas.melt() para converter as colunas de meses em linhas.
# Converter o DataFrame do formato wide para long
products_sales_2025_melted = products_sales_2025.melt(
# Manter as colunas Product e Category inalteradas
id_vars=["Product", "Category"],
# Converter as colunas de meses em linhas
value_vars=["January", "February", "March", "April", "May", "June"],
# Nome da nova coluna que armazena os nomes originais das colunas
var_name="Month",
# Nome da nova coluna que armazena os valores de vendas correspondentes
value_name="Sales"
)
# Exibir o DataFrame remodelado
products_sales_2025_melted.head(10)
O DataFrame resultante agora armazena cada mês como uma linha separada.

Exemplos comuns de pandas.melt()
Agora que você entendeu como funciona a sintaxe de pandas.melt(), vou mostrar como cada parâmetro se comporta isoladamente. Vamos usar a tabela acima nos próximos exemplos.
Derreter colunas selecionadas
O parâmetro value_vars permite especificar quais colunas serão desempilhadas. Em vez de derreter todos os meses, você pode converter apenas as colunas de que precisa.
Neste exemplo, apenas as colunas January e February são derretidas. As demais colunas de meses são ignoradas.
# Converter apenas as colunas January e February em linhas
product_sales_3month = products_sales_2025.melt(
id_vars="Product",
value_vars=["January", "February",]
)
product_sales_3month.head(20)

Manter colunas identificadoras
Use o parâmetro id_vars para manter uma ou mais colunas inalteradas enquanto as demais são remodeladas.
No exemplo abaixo, “Product” e “Category” permanecem inalteradas, enquanto as colunas de vendas mensais são convertidas em linhas.
# Manter as colunas Product e Category enquanto derrete as vendas mensais
product_sales_cat = products_sales_2025.melt(
id_vars=["Product", "Category"]
)
product_sales_cat.head()

Renomear as colunas de saída
Se você reparou, as colunas de saída se chamam variable e value por padrão. Use os argumentos var_name e value_name para dar nomes mais descritivos.
Por exemplo, renomeamos a coluna de variável para “Month” e a de valores para “Sales” no resultado abaixo.
# Manter as colunas Product e Category enquanto derrete as vendas mensais
# Renomear as colunas Month e Sales
product_sales_cat = products_sales_2025.melt(
id_vars=["Product", "Category"],
var_name="Month",
value_name="Sales"
)
product_sales_cat.head()

Preservar o índice original
Por padrão, pandas.melt() cria um novo índice sequencial. Defina ignore_index=False para manter o índice original das linhas.
# Manter o índice original após a remodelagem
product_sales_index = products_sales_2025.melt(
id_vars=["Product", "Category"],
var_name="Month",
value_name="Sales",
ignore_index=False
)
product_sales_index.head(10)

No exemplo acima, os rótulos originais das linhas (0–5) são repetidos para cada mês, em vez de serem substituídos por um novo índice sequencial.
Quando usar pandas.melt()?
pandas.melt() é útil quando seus dados estão em formato wide e precisam ser transformados para o formato long para análise ou visualização. A função também é importante nos casos a seguir:
-
Converter dados wide para o formato long: muitos conjuntos de dados guardam valores relacionados em várias colunas. Embora esse formato seja fácil de ler, pode dificultar a análise.
pandas.melt()combina essas colunas em uma única coluna, preservando as colunas identificadoras e criando uma estrutura mais limpa para o processamento. -
Preparar dados para gráficos: muitas bibliotecas de visualização, como Seaborn, funcionam melhor com dados em formato long. Em vez de combinar colunas manualmente, você pode usar
pandas.melt()para remodelar os dados no formato que essas bibliotecas esperam. -
Preparar dados para análises estatísticas: muitas operações do pandas, incluindo
groupby(), agregações, filtros e estatísticas descritivas, ficam mais simples quando as medições estão em uma única coluna, e não espalhadas em várias. Ao remodelar seus dados compandas.melt(), você reduz a quantidade de código necessária para analisar diferentes variáveis. -
Criar datasets arrumados (tidy): um dataset "tidy" armazena cada variável em sua própria coluna e cada observação em sua própria linha. Se seu conjunto de dados contém medições repetidas em várias colunas,
pandas.melt()costuma ser a forma mais rápida de convertê-lo para um formato arrumado.
Recomendo fazer o nosso Introduction to Data Visualization with Seaborn para aprender a criar e personalizar vários tipos de gráficos em Python, incluindo dispersão, contagem, barras e box plots.
pandas.melt() vs. outras funções de remodelagem
O pandas oferece várias funções para remodelar dados, cada uma com um propósito. Vamos ver as diferenças entre elas.
pandas.melt() vs. pivot()
A tabela abaixo mostra a diferença entre as funções pandas.melt() e pivot().
|
|
|
|
Converte dados wide em dados long. |
Converte dados long em dados wide. |
|
Transforma colunas em linhas. |
Transforma valores de linha em colunas. |
|
Útil para preparar dados para análise e visualização. |
Útil para resumir ou apresentar dados em relatórios. |
Portanto, escolha melt() quando suas medições estiverem espalhadas em várias colunas, ou pivot() quando quiser espalhar valores de linha por colunas.
pandas.melt() vs. stack()
Embora ambas as funções remodelam dados, veja como elas se diferem.
|
|
|
|
Remodela colunas regulares em linhas. |
Move um ou mais níveis de coluna para o índice. |
|
Gera um DataFrame padrão. |
Gera uma Series ou DataFrame com MultiIndex. |
|
Mais fácil de ler e usar na maioria das análises. |
Mais indicado para operações baseadas em índice. |
Você pode usar stack() quando precisar trabalhar com índices hierárquicos ou objetos MultiIndex.
pandas.melt() vs. wide_to_long()
Ambas as funções convertem dados wide para o formato long, mas foram pensadas para situações diferentes, como mostrado abaixo.
|
|
|
|
Flexível e funciona com praticamente qualquer DataFrame. |
Projetada para datasets com padrões consistentes de nomes de colunas. |
|
Adequada para remodelagem geral. |
Ideal para medições repetidas, como Sales_2023, Sales_2024 e Sales_2025. |
Se o seu conjunto de dados tem nomes de colunas irregulares, use melt(). Se as colunas seguem uma convenção de nomenclatura previsível, use wide_to_long() para remodelar com menos código.
Erros comuns com pandas.melt()
Embora pandas.melt() seja simples de usar, estes são os problemas mais comuns que já encontrei — e como corrigi-los.
-
Esquecer o id_vars: se você não especificar
id_vars, o pandas trata todas as colunas que não estão emvalue_varscomo colunas de valor. Isso pode remodelar colunas que você queria manter como identificadoras. Para corrigir, identifique sempre as colunas que descrevem unicamente cada registro e passe-as emid_vars. -
Derreter colunas indesejadas: se você omitir
value_vars, o pandas derrete todas as colunas que não estão emid_vars. Isso pode incluir colunas que você não pretendia remodelar. Portanto, sempre especifiquevalue_varsquando quiser derreter apenas um subconjunto de colunas. -
Entender errado o formato de saída: após derreter, o número de linhas aumenta, porque cada coluna selecionada vira uma linha separada para cada registro. Por exemplo, um DataFrame com 10 linhas e 12 colunas de meses gera 120 linhas após derreter os meses. Portanto, verifique sempre as dimensões antes e depois da remodelagem para confirmar se o resultado está correto.
-
Confundir formatos wide e long: lembre-se: no formato wide, valores semelhantes ficam espalhados por várias colunas. No formato long, valores semelhantes ficam em uma única coluna, com outra coluna indicando a variável.
Boas práticas ao usar pandas.melt()
Para deixar seu código de remodelagem mais claro e fácil de manter, recomendo seguir estas boas práticas ao usar a função pandas.melt():
-
Identifique primeiro as colunas identificadoras: decida quais colunas devem permanecer inalteradas e passe-as em
id_vars. -
Renomeie as colunas geradas: use
var_nameevalue_nameem vez de depender dos nomes padrão variable e value. -
Confira a contagem de linhas após derreter: verifique se o número de linhas bate com o esperado, especialmente ao derreter muitas colunas.
-
Use pivot() para voltar ao formato original: se precisar restaurar o formato wide após a análise, use a função
pivot().
Faça o nosso Writing Efficient Python Code para aprender a escrever código eficiente, fácil de depurar e manter.
Conclusão
pandas.melt() é a função padrão do pandas para converter dados em formato wide para o formato long. E, depois que você entende os papéis de id_vars e value_vars, consegue controlar quais colunas permanecem como identificadoras e quais viram linhas.
Para se aprofundar em Python, explore nossas trilhas de habilidades Python Data Fundamentals e Python Programming Fundamentals.
FAQs
Quando devo usar pandas.melt()?
Use quando seus dados tiverem valores repetidos espalhados por colunas e você quiser um DataFrame em formato long para análise ou visualização.
O que são var_name e value_name?
Esses parâmetros renomeiam as colunas geradas que armazenam os nomes originais das colunas e seus valores correspondentes.
pandas.melt() modifica o DataFrame original?
Não. Ela retorna um novo DataFrame remodelado e mantém o original intacto.
Qual a diferença entre melt() e pivot()?
melt() converte dados wide para o formato long, enquanto pivot() faz o caminho inverso, convertendo long para wide.
Qual a diferença entre melt() e stack()?
melt() remodela colunas em linhas mantendo um DataFrame regular. stack() move colunas para o índice e cria uma estrutura hierárquica (MultiIndex).


