Intermediário 10 min de leitura 11/08/2026

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.