Pular para o conteúdo principal

pandas melt(): a melhor forma de converter dados wide para long

Aprenda a usar pandas.melt() para remodelar DataFrames do formato wide para long, com exemplos práticos e casos de uso comuns.
Atualizado 4 de ago. de 2026  · 8 min lido

Explorar com IA

Abrir no ChatGPTAbrir no ClaudeAbrir no Perplexity

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 usar pandas.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 em id_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: se True (padrão), cria um novo índice sequencial. Se False, 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.

Exemplo de DataFrame em formato wide.

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.

DataFrame convertido para o formato long usando pandas.melt()

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)

Derreter colunas selecionadas usando pandas.melt()

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()

Manter colunas identificadoras usando a função pandas.melt().

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()

Renomear as colunas de saída usando var_name e value_name na função pandas.melt().

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)

Usando ignore_index=False para preservar o índice original na função pandas.melt().

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 com pandas.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().

melt()

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.

melt()

stack()

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.

melt()

wide_to_long()

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 em value_vars como 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 em id_vars.

  • Derreter colunas indesejadas: se você omitir value_vars, o pandas derrete todas as colunas que não estão em id_vars. Isso pode incluir colunas que você não pretendia remodelar. Portanto, sempre especifique value_vars quando 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_name e value_name em 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.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.

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).

Tópicos

Aprenda pandas com a DataCamp

Curso

Ingestão de dados simplificada com pandas

4 h
63.3K
Aprenda a obter dados de formatos e sistemas comuns como CSV, planilhas, JSON, bancos SQL e APIs.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

Uma introdução aos polares: Ferramenta Python para análise de dados em grande escala

Explore o Polars, uma biblioteca Python robusta para manipulação e análise de dados de alto desempenho. Saiba mais sobre seus recursos, suas vantagens em relação ao pandas e como ele pode revolucionar seus processos de análise de dados.
Moez Ali's photo

Moez Ali

9 min

data-frames-in-python-banner_cgzjxy.jpeg

Tutorial

Pandas Tutorial: DataFrames em Python

Explore a análise de dados com Python. Os DataFrames do Pandas facilitam a manipulação de seus dados, desde a seleção ou substituição de colunas e índices até a remodelagem dos dados.
Karlijn Willems's photo

Karlijn Willems

Tutorial

Tutorial de junção de DataFrames no pandas

Neste tutorial, você aprenderá várias maneiras pelas quais vários DataFrames podem ser mesclados em python usando a biblioteca Pandas.
DataCamp Team's photo

DataCamp Team

Tutorial

Tutorial de seleção de colunas em Python

Use o Python Pandas e selecione colunas de DataFrames. Siga nosso tutorial com exemplos de código e aprenda diferentes maneiras de selecionar seus dados hoje mesmo!
DataCamp Team's photo

DataCamp Team

Tutorial

Tutorial do Python pandas: O guia definitivo para iniciantes

Você está pronto para começar sua jornada com os pandas? Aqui está um guia passo a passo sobre como você pode começar.
Vidhi Chugh's photo

Vidhi Chugh

Tutorial

Tutorial sobre loops for em Python

Aprenda a usar loops “for” em Python pra iterar uma sequência ou as linhas e colunas de um DataFrame pandas.
Aditya Sharma's photo

Aditya Sharma

Ver MaisVer Mais