Planilhas de inventário no comércio eletrônico frequentemente chegam corrompidas por erros manuais, extrações incompletas ou integrações de APIs inconsistentes. No setor de beleza e cosméticos, a complexidade aumenta: variações de volume (ex.: ’50ml’, ’50 ml’, ‘0.05L’), tons de maquiagem, códigos de barras ausentes e nomes de marcas truncados inviabilizam operações de precificação, gestão de estoque e sincronização em marketplaces como o JioMart.
Neste artigo, você aprenderá a estruturar um pipeline em Python para higienizar, validar e enriquecer catálogos de produtos brutos, transformando dados desestruturados em uma base confiável e pronta para produção.
O Desafio dos Dados Brutos em Cosméticos e E-commerce
Planilhas brutas de categorias como Beauty & Personal Care costumam apresentar quatro problemas críticos:
- Atributos misturados nos títulos: Marcas, pesos e volumes inseridos de forma inconsistente no campo de descrição.
- Inconsistência de tipos de dados: Preços salvos como texto misturados a moedas, estoques nulos tratados como zero ou strings vazias.
- Registros duplicados disfarçados: O mesmo produto cadastrado com pequenos desvios tipográficos ou pontuações divergentes.
- Quebra de taxonomia: Falta de alinhamento com a árvore de categorias exigida pelo marketplace.
Resolver esses problemas manualmente em centenas de milhares de linhas é inviável. A abordagem correta envolve scripts de engenharia de dados orientados a regras determinísticas e processamento de linguagem natural.
Passo 1: Ingestão Eficiente e Diagnóstico Inicial
O primeiro passo consiste em carregar o arquivo bruto e identificar anomalias estruturais sem sobrecarregar a memória:
python
import pandas as pd
import numpy as np
def carregarinventario(caminhoarquivo: str) -> pd.DataFrame:
# Carregamento com tratamento de codificação e tipos preliminares
df = pd.readexcel(caminhoarquivo, engine=’openpyxl’)
# Padronização de nomes de colunas
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
return df
dfbruto = carregarinventario(‘jiomartbeautyraw.xlsx’)
print(df_bruto.info())
Essa etapa garante que espaços ocultos em cabeçalhos não gerem erros posteriores em etapas de filtragem.
Passo 2: Extração de Atributos com Expressões Regulares (Regex)
Em cosméticos, o volume ou peso é essencial para desmembrar variações de SKU. É comum o volume estar inserido no final do título do produto (ex.: “Hidratante Facial Neutrogena Hydro Boost 50g”).
python
import re
def extrair_volume(titulo: str) -> str:
if not isinstance(titulo, str):
return np.nan
# Padrão para capturar volumes como 50ml, 100 g, 1.5l, etc.
padrao = r'(d+(?:.d+)?s*(?:ml|g|kg|l|oz|fl.?s*oz))'
resultado = re.search(padrao, titulo, flags=re.IGNORECASE)
return resultado.group(1).lower().replace(' ', '') if resultado else np.nan
Aplicando ao catálogo
dfbruto[‘volumepadronizado’] = dfbruto[‘nomeproduto’].apply(extrair_volume)
Isolar métricas estruturadas permite filtrar produtos e criar filtros facetados no e-commerce sem depender de revisão humana.
Passo 3: Limpeza Numérica e Conversão de Moedas
Campos de preço e estoque frequentemente trazem símbolos monetários ou separadores incorretos:
python
def sanitizarvaloresmonetarios(coluna: pd.Series) -> pd.Series:
return (
coluna.astype(str)
.str.replace(r'[^0-9.,]’, ”, regex=True)
.str.replace(‘,’, ‘.’)
.astype(float)
)
dfbruto[‘precolimpo’] = sanitizarvaloresmonetarios(dfbruto[‘precovenda’])
dfbruto[‘estoque’] = pd.tonumeric(df_bruto[‘estoque’], errors=’coerce’).fillna(0).astype(int)
Passo 4: Deduplicação Fuzzy e Correspondência de Marcas
Como especialista em IA e engenharia de dados, frequentemente vejo empresas lidando com duplicatas que escapam do .drop_duplicates(). Variações como “L’Oréal” e “Loreal Paris” precisam ser tratadas via normalização textual ou algoritmos de similaridade como Levenshtein:
python
from rapidfuzz import process, fuzz
marcas_canonicas = [‘L’Oréal’, ‘Nivea’, ‘Neutrogena’, ‘Maybelline’, ‘Cetaphil’]
def normalizarmarca(nomeencontrado: str, cortesimilaridade: float = 85.0) -> str:
if not isinstance(nomeencontrado, str):
return ‘Outros’
match = process.extractOne(
nome_encontrado,
marcas_canonicas,
scorer=fuzz.token_sort_ratio
)
if match and match[1] >= corte_similaridade:
return match[0]
return nome_encontrado.title()
dfbruto[‘marcacanonizada’] = dfbruto[‘marcadeclarada’].apply(normalizar_marca)
Passo 5: Validação do Schema com Pydantic
Antes de persistir os dados no banco de dados ou reexportar para o marketplace, aplicamos regras estritas de validação para impedir que novos registros inválidos entrem em produção:
python
from pydantic import BaseModel, Field, ValidationError
from typing import Optional
class ItemBelezaValidado(BaseModel):
sku: str
nomeproduto: str
marcacanonizada: str
precolimpo: float = Field(gt=0, description=”O preço deve ser positivo”)
estoque: int = Field(ge=0)
volumepadronizado: Optional[str]
registrosvalidos = [] registroscom_erro = []
for linha in dfbruto.todict(orient=’records’):
try:
item = ItemBelezaValidado(**linha)
registrosvalidos.append(item.modeldump())
except ValidationError as err:
registroscomerro.append({‘sku’: linha.get(‘sku’), ‘erros’: err.errors()})
dffinal = pd.DataFrame(registrosvalidos)
Arquitetura de um Pipeline de Inventário Sustentável
O processo manual de higienizar arquivos toda semana não escala. Uma estrutura automatizada eficiente opera sob o seguinte fluxo:
- Watcher ou Webhook: Detecta novos arquivos ou atualizações no ERP/Marketplace.
- Módulo de Parsing: Limpa strings, extrai entidades e normaliza campos críticos.
- Validação de Negócio: Aplica esquemas rígidos e isola produtos inconsistentes em filas de auditoria.
- Carga e Exportação: Atualiza a base consolidada sem intervenção manual.
Conclusão e Próximos Passos
Manter um catálogo de cosméticos limpo e padronizado não é apenas uma exigência estética: reduz devoluções, viabiliza algoritmos de precificação dinâmica e melhora o ranqueamento em plataformas como o JioMart.
Se a sua empresa lida com inventários fragmentados, integrações complexas ou catálogos extensos que demandam automação avançada com Python e Inteligência Artificial, posso ajudar a projetar uma solução robusta para o seu negócio. Entre em contato para uma consultoria técnica personalizada.


