Como Limpar Dados Mistos em CSV e Excel Usando Python

Aprenda a estruturar um pipeline em Python para limpar, padronizar e converter dados mistos de texto e números em arquivos CSV e Excel de forma automatizada.

Arquivos CSV e planilhas Excel frequentemente chegam corrompidos por inconsistências: números formatados como texto, símbolos de moeda misturados a valores numéricos, separadores decimais conflitantes e caracteres espúrios em campos que deveriam ser estritamente quantitativos. Quando pipelines de dados ou modelos de aprendizado de máquina consomem essas fontes sem o devido saneamento, o resultado inevitável são erros de tipagem (TypeError), valores nulos indesejados (NaN) e perda de integridade analítica.

Neste guia, você aprenderá a estruturar um fluxo técnico eficiente em Python para identificar, limpar e padronizar colunas com tipos de dados mistos em múltiplos arquivos.


O Desafio dos Dados Mistos em Lote

Em ambientes operacionais, os dados costumam ser exportados de diferentes sistemas legados. Uma única coluna que deveria representar faturamento pode conter:

  • Strings como "R$ 1.250,50" ou "1250.50".
  • Notações com ponto e vírgula invertidos.
  • Textos de controle como "N/A", "pendente" ou "-" misturados a números reais.
  • Espaços invisíveis (whitespace) e caracteres não imprimíveis.

Processar esses arquivos manualmente no Excel é inviável em grande escala e altamente suscetível a erros. A abordagem recomendada é construir um pipeline automatizado com pandas e expressões regulares (re).


Pipeline Automatizado de Limpeza com Pandas

Para lidar com grandes volumes com alto desempenho, implementamos funções vetorizadas que tratam o texto antes da coerção para tipos numéricos.

python
import re
import numpy as np
import pandas as pd
from pathlib import Path

def sanitizarcamponumerico(valor):
“””
Normaliza strings com valores mistos para float,
tratando formatos brasileiros (1.000,00) e internacionais (1,000.00).
“””
if pd.isna(valor):
return np.nan

texto = str(valor).strip()

# Remove símbolos de moeda e caracteres alfanuméricos residuais
texto = re.sub(r"[^0-9,.-]", "", texto)

if not texto or texto == "-":
    return np.nan

# Trata padrão brasileiro: remove ponto de milhar e troca vírgula por ponto
if "," in texto and "." in texto:
    if texto.rfind(",") > texto.rfind("."):
        texto = texto.replace(".", "").replace(",", ".")
    else:
        texto = texto.replace(",", "")
elif "," in texto:
    texto = texto.replace(",", ".")

try:
    return float(texto)
except ValueError:
    return np.nan

def processararquivos(diretorioorigem: str, diretoriodestino: str, colunasnumericas: list):
“””
Processa em lote arquivos CSV e Excel, aplicando limpeza estruturada.
“””
origem = Path(diretorioorigem)
destino = Path(diretorio
destino)
destino.mkdir(parents=True, exist_ok=True)

arquivos = list(origem.glob("*.csv")) + list(origem.glob("*.xlsx"))

for caminho in arquivos:
    if caminho.suffix == ".csv":
        df = pd.read_csv(caminho, dtype=str, keep_default_na=False)
    else:
        df = pd.read_excel(caminho, dtype=str)

    # Aplica saneamento nas colunas com conteúdo misto
    for coluna in colunas_numericas:
        if coluna in df.columns:
            df[coluna] = df[coluna].apply(sanitizar_campo_numerico)

    # Remove espaços em branco redundantes nas colunas de texto restantes
    colunas_texto = df.select_dtypes(include=["object"]).columns
    for col in colunas_texto:
        df
	
= df
.astype(str).str.strip() saida_caminho = destino / f"cleaned_{caminho.stem}.parquet" df.to_parquet(saida_caminho, index=False) print(f"Processado com sucesso: {saida_caminho.name}")

Boas Práticas para Estruturação de Dados

  1. Exportação em Formato Otimizado: Após a limpeza, exportar para formatos colunares como Parquet preserva a tipagem estrita (inteiros, floats, datas) e reduz o consumo de memória em até 80% comparado ao CSV.
  2. Validação com Schemas: Utilizar bibliotecas como Pydantic ou Pandera garante que registros fora do padrão disparem alertas automáticos em vez de quebrar a esteira de processamento.
  3. Isolamento de Erros: Registros não conversíveis devem ser roteados para uma tabela de quarentena para auditoria, evitando descarte silencioso de informações.

Otimização e Inteligência de Dados

Como especialista em IA e engenharia de dados, desenvolvo rotinas que vão além da limpeza sintática básica. A integração de regras de negócio avançadas, detecção de padrões via aprendizado não supervisionado e automação distribuída transformam repositórios de dados fragmentados em bases sólidas para inteligência analítica e modelos preditivos.

Se a sua empresa precisa automatizar o tratamento de grandes volumes de dados complexos, migrar planilhas legadas ou estruturar um pipeline resiliente, entre em contato para desenharmos uma solução sob medida.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.