(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como fazer one-hot encoding de dados categóricos em Python

João Barros 06 de July de 2026 4 min de leitura

O one-hot encoding é a forma mais comum de transformar dados categóricos — texto como "azul" ou "vermelho" — em colunas numéricas que um modelo de Machine Learning consegue usar. A maioria dos algoritmos, da regressão às árvores de decisão, só trabalha com números. Se deixarmos as categorias como texto, o treino falha; se as trocarmos por 1, 2 e 3, criamos uma ordem falsa entre elas. O one-hot encoding resolve os dois problemas de uma só vez e é simples de aplicar em Python com o scikit-learn.

Pré-requisitos

  • Python 3.8 ou superior instalado.
  • As bibliotecas scikit-learn e pandas.
  • Conhecer o básico de DataFrames do pandas.
  • Um conjunto de dados com pelo menos uma coluna de texto (categórica).

Passo 1: Perceber o problema

Imagina uma tabela com uma coluna "cor". Os valores "azul", "verde" e "vermelho" não têm significado matemático, e não podemos simplesmente trocá-los por 1, 2 e 3 — isso faria o modelo pensar que "vermelho" (3) é maior do que "azul" (1), o que não faz sentido. Vamos criar este exemplo:

import pandas as pd

df = pd.DataFrame({
    "cor": ["azul", "verde", "vermelho", "azul"],
    "preco": [10, 15, 20, 12]
})
print(df)

A coluna cor é categórica; a coluna preco já é numérica e não precisa de tratamento.

Passo 2: Importar o OneHotEncoder

O scikit-learn traz uma classe pronta para esta tarefa: o OneHotEncoder. Se ainda não tens as bibliotecas, instala-as no terminal com pip install scikit-learn pandas. Depois, importa o codificador no teu script:

from sklearn.preprocessing import OneHotEncoder

Passo 3: Aplicar o one-hot encoding

Criamos o codificador e aplicamo-lo à coluna categórica. O parâmetro sparse_output=False devolve um array normal (mais fácil de ler) e handle_unknown="ignore" evita erros se, mais tarde, aparecerem categorias que o codificador não viu no treino.

encoder = OneHotEncoder(sparse_output=False, handle_unknown="ignore")

codificado = encoder.fit_transform(df[["cor"]])
print(codificado)

O método fit_transform faz duas coisas: aprende quais as categorias existentes (fit) e transforma-as em números (transform). O resultado é uma matriz em que cada categoria passa a ser uma coluna com valores 0 ou 1. Cada linha tem um único 1 — daí o nome "one-hot".

Passo 4: Juntar as colunas ao DataFrame

A matriz sozinha é pouco legível. Vamos dar-lhe nomes de colunas com get_feature_names_out() e juntá-la ao DataFrame original, removendo a coluna de texto:

nomes = encoder.get_feature_names_out(["cor"])
df_codificado = pd.DataFrame(codificado, columns=nomes)

resultado = pd.concat([df.drop(columns=["cor"]), df_codificado], axis=1)
print(resultado)

Agora tens um DataFrame totalmente numérico, com colunas como cor_azul, cor_verde e cor_vermelho, pronto para treinar um modelo.

Passo 5: Alternativa rápida com pandas

Para uma exploração rápida, o pandas oferece o get_dummies, que faz o mesmo numa única linha:

resultado_rapido = pd.get_dummies(df, columns=["cor"])
print(resultado_rapido)

É muito prático para análises pontuais. Ainda assim, em projetos de Machine Learning o OneHotEncoder é preferível, porque memoriza as categorias vistas no treino e aplica exatamente as mesmas aos dados de teste, evitando colunas diferentes entre conjuntos. Dica: para evitar redundância entre colunas, podes usar OneHotEncoder(drop="first"), que remove a primeira categoria.

Verificar o resultado

Confirma que o DataFrame final já não tem texto: todas as colunas devem ser numéricas. Deverás ver uma coluna por cada cor distinta, com 0 ou 1 em cada linha. Uma boa verificação é somar cada linha das colunas de cor — o total deve ser sempre 1, porque cada registo pertence a exatamente uma categoria. Testa com df_codificado.sum(axis=1) e confirma que todos os valores são 1.

Conclusão

Acabaste de converter dados categóricos em colunas numéricas com one-hot encoding, usando o OneHotEncoder do scikit-learn e a alternativa get_dummies do pandas. O próximo passo natural é integrar este codificador num Pipeline, para aplicar o pré-processamento e o treino do modelo de uma só vez. Que colunas categóricas existem no teu conjunto de dados que precisam de ser codificadas?