Limpando dados reais com Pandas: 10 técnicas essenciais
10 técnicas essenciais para limpar dados reais: nulos, tipos errados, duplicatas e exportação
80% do tempo de um projeto de dados é limpeza. Dados reais chegam com nulos, tipos errados, espaços escondidos, duplicatas e inconsistências. Vamos cobrir as 10 técnicas que você vai usar em praticamente todo projeto.
import pandas as pd
df = pd.read_csv("vendas.csv")
df.shape # (linhas, colunas)
df.dtypes # tipos de cada coluna
df.head() # primeiras 5 linhas
1. Identificar valores nulos
df.isnull().sum() # quantos nulos por coluna
df.isnull().sum() / len(df) * 100 # % de nulos
2. Remover linhas com nulos
# Remove linha se qualquer coluna for nula
df = df.dropna()
# Remove só se colunas específicas forem nulas
df = df.dropna(subset=["email", "valor"])
3. Preencher nulos com um valor
df["cidade"].fillna("Não informado", inplace=True)
df["desconto"].fillna(0, inplace=True)
# Com a mediana (bom para evitar distorção de outliers)
df["idade"].fillna(df["idade"].median(), inplace=True)
4. Remover duplicatas
df.duplicated().sum() # quantas linhas duplicadas
df = df.drop_duplicates() # remove todas
df = df.drop_duplicates(subset=["cpf"]) # mantém só primeira ocorrência por CPF
5. Corrigir tipos de dados
# Coluna "valor" veio como string "R$ 1.250,90"
df["valor"] = (
df["valor"]
.str.replace("R$ ", "", regex=False)
.str.replace(".", "", regex=False)
.str.replace(",", ".", regex=False)
.astype(float)
)
# Data como string → datetime
df["data"] = pd.to_datetime(df["data"], format="%d/%m/%Y")
6. Limpar texto: espaços e capitalização
df["nome"] = df["nome"].str.strip() # remove espaços das bordas
df["nome"] = df["nome"].str.title() # Primeira Letra Maiúscula
df["email"] = df["email"].str.lower() # tudo minúsculo
7. Renomear colunas
df = df.rename(columns={
"Nm_Cliente": "nome",
"Vl_Pedido": "valor",
"Dt_Compra": "data",
})
8. Filtrar linhas com condições
# Uma condição
df_ativos = df[df["status"] == "ativo"]
# Múltiplas condições
df_grandes = df[(df["valor"] > 1000) & (df["cidade"] == "São Paulo")]
9. Criar colunas calculadas
df["valor_com_taxa"] = df["valor"] * 1.05
df["mes"] = df["data"].dt.month
df["categoria"] = df["valor"].apply(
lambda v: "alto" if v > 500 else "baixo"
)
10. Exportar o DataFrame limpo
df.to_csv("vendas_limpo.csv", index=False)
df.to_excel("vendas_limpo.xlsx", index=False)
# Para banco de dados:
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:senha@host/banco")
df.to_sql("vendas", engine, if_exists="replace", index=False)
Sempre salve o CSV original intacto e trabalhe em cima de uma cópia. Nunca sobrescreva dados brutos — você vai querer voltar a eles.
Próximos passos
Com os dados limpos, o próximo passo é garantir que seu código não vai quebrar silenciosamente quando os dados mudarem — é aí que testes automatizados entram.