Como Automatizar a Limpeza de Dados Numéricos Armazenados como Texto com Python

Aprenda a criar pipelines em Python para converter campos numéricos formatados como texto em dados estruturados, limpos e prontos para análise.

Integrar dados provenientes de diferentes sistemas legados, CRMs ou arquivos CSV exportados manualmente costuma gerar um gargalo crítico: valores numéricos representados como texto não padronizado. É comum encontrar números acompanhados de símbolos de moedas, espaços extras, separadores de milhar conflitantes (pontos vs. vírgulas) e caracteres não imprimíveis. Quando essas colunas não são tratadas corretamente, modelos preditivos e relatórios analíticos quebram ou operam sobre dados incorretos.

Neste artigo, você aprenderá a construir um pipeline automatizado em Python focado na sanitização e conversão precisa desses campos numéricos, garantindo performance e confiabilidade operacional.

O Problema: Heterogeneidade de Formatos Numéricos

Em ecossistemas corporativos, um sistema financeiro pode exportar valores no padrão brasileiro (R$ 1.500,50), enquanto uma plataforma de e-commerce internacional envia os mesmos valores no formato norte-americano ($1,500.50). Outros sistemas incluem marcadores de ausência como "-", "N/A" ou espaços em branco.

Tentar converter esses campos diretamente via int() ou float() gera exceções imediatas (ValueError). Iterar sobre linhas com loops tradicionais (for) cria gargalos inaceitáveis em volumes massivos. A solução exige vetorização e expressões regulares otimizadas.

Passo 1: Construindo um Parser Numérico Vetorizado

Para lidar com grandes volumes de dados de forma eficiente, evite o uso de loops for e priorize métodos vetorizados da biblioteca Pandas ou Polars. O primeiro passo é isolar os padrões textuais e aplicar regras de normalização de pontuação.

python
import pandas as pd
import re

def sanitizarcolunanumerica(serie: pd.Series) -> pd.Series:
“””
Remove caracteres não numéricos e converte strings para float de forma vetorizada.
“””
# 1. Converter tudo para string e remover espacos nas pontas
s = serie.astype(str).str.strip()

# 2. Identificar e tratar missing values textuais comuns
s = s.replace(r'^(?:N/A|null|none|-|--|s*)$', '', regex=True, case=False)

# 3. Remover simbolos monetarios e caracteres alfanumericos indesejados
s = s.str.replace(r'[^0-9,.-]', '', regex=True)

# 4. Normalizar separadores decimais e de milhar (detectando formato BR vs US)
# Se contiver virgula e ponto, assumimos a logica de posicao
def normalizar_pontuacao(val):
    if not val or val == '':
        return None
    if ',' in val and '.' in val:
        if val.rfind(',') > val.rfind('.'):
            # Padrao Europeu/BR: 1.000,00 -> 1000.00
            val = val.replace('.', '').replace(',', '.')
        else:
            # Padrao US: 1,000.00 -> 1000.00
            val = val.replace(',', '')
    elif ',' in val:
        # Apenas virgula presente, tratada como separador decimal
        val = val.replace(',', '.')
    return val

s = s.map(normalizar_pontuacao)

# 5. Conversao final para numerico de alta performance
return pd.to_numeric(s, errors='coerce')

Passo 2: Automação da Detecção de Colunas Problemáticas

Como especialista em IA e engenharia de dados, costumo observar que a intervenção manual em esquemas dinâmicos é um dos maiores pontos de falha. Criar uma camada de inspeção que identifica colunas com alta probabilidade de serem numéricas disfarçadas de texto reduz a manutenção do código.

python
def detectarelimpartabelas(df: pd.DataFrame, limiaramostragem: float = 0.8) -> pd.DataFrame:
df_processado = df.copy()

for coluna in df_processado.select_dtypes(include=['object', 'string']):
    # Amostra para validar se os valores contem padroes numericos
    amostra = df_processado[coluna].dropna().astype(str)
    if len(amostra) == 0:
        continue

    # Contagem de valores que contem digitos
    contem_digitos = amostra.str.contains(r'd', regex=True).mean()

    if contem_digitos >= limiar_amostragem:
        df_processado[coluna] = sanitizar_coluna_numerica(df_processado[coluna])

return df_processado

Boas Práticas de Validação e Integridade

Ao automatizar processos de ETL numéricos, implemente sempre:

  1. Relatório de Nulos Induzidos: Avalie a quantidade de registros que foram convertidos para NaN via errors='coerce'. Se a taxa for superior ao esperado, o pipeline deve disparar um alerta.
  2. Definição de Tipagem Precisa: Use Float64 ou Int64 com suporte nativo a nulos (Nullable Data Types do Pandas) para evitar coerção silenciosa de números inteiros para ponto flutuante.
  3. Testes Unitários com Casos Limítrofes: Inclua testes cobrindo valores negativos entre parênteses, formatos contábeis como (150.00) e valores com múltiplos separadores.

Escalando Pipelines de Dados

Se a sua empresa lida diariamente com múltiplos sistemas que geram dados não estruturados, scripts isolados tornam-se difíceis de manter. Automatizar a higienização de dados em pipelines robustos e escaláveis é o caminho para garantir análises confiáveis e modelos de machine learning precisos.

Precisa de suporte técnico especializado para desenhar arquiteturas de dados ou automatizar processos analíticos complexos? Entre em contato para estruturarmos uma solução alinhada aos desafios do seu negócio.

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