Automação em Python: Como Converter Excel para Parquet com Alta Eficiência
Planilhas em formato Excel (.xlsx) continuam sendo o padrão de fato para troca de informações operacionais em grande parte das empresas. No entanto, à medida que os volumes de dados crescem, o uso desse formato em rotinas analíticas e sistemas automatizados torna-se um gargalo crítico: arquivos pesados, leitura lenta e consumo excessivo de memória RAM são problemas recorrentes.
A transição do armazenamento tabular de Excel para o formato colunar Apache Parquet é uma das formas mais diretas de resolver esses desafios operacionais. Neste artigo, você verá como construir uma solução em Python 3 para automatizar essa conversão, adotando código idiomático, tipagem estrita e dependências enxutas.
Por que Migrar de Excel para Parquet?
O formato Excel é baseado em XML compactado, estruturado linha a linha e sem imposição rigorosa de tipos de dados. Já o Parquet foi projetado especificamente para processamento analítico (OLAP), oferecendo:
- Compressão Colunar Superior: Redução comum de 70% a 90% no tamanho em disco comparado ao arquivo original em
.xlsx. - Leitura Seletiva (Projection & Predicate Pushdown): Ferramentas de análise conseguem ler apenas as colunas necessárias sem carregar a base inteira na memória.
- Preservação de Tipos: Inteiros, datas e textos mantêm seus tipos explícitos, evitando surpresas comuns de conversão implícita.
Estrutura do Código: Práticas Idiomáticas e Dependências Mínimas
Para garantir manutenibilidade e baixo acoplamento em ambientes de produção, mantemos as dependências restritas a bibliotecas consolidadas e amplamente suportadas: pandas e o motor pyarrow (ou fastparquet).
O exemplo a seguir implementa uma função tipada, com docstring estruturada (padrão Google/NumPy) e tratamento de erros direcionado.
python
from pathlib import Path
from typing import Union
import pandas as pd
def converterexcelparaparquet(
caminhoorigem: Union[str, Path],
caminhodestino: Union[str, Path] = None,
nomeaba: Union[str, int] = 0,
compressao: str = “snappy”,
) -> Path:
“””
Converte uma planilha Excel (.xlsx/.xls) para o formato Apache Parquet.
Args:
caminho_origem (Union[str, Path]): Caminho do arquivo Excel de entrada.
caminho_destino (Union[str, Path], optional): Caminho do arquivo Parquet
de saída. Se omitido, usa o mesmo nome e diretório com extensão .parquet.
nome_aba (Union[str, int], optional): Nome ou índice da aba a ser lida.
Padrão é 0 (primeira aba).
compressao (str, optional): Algoritmo de compressão Parquet ('snappy',
'gzip', 'brotli'). Padrão é 'snappy'.
Returns:
Path: Caminho do arquivo Parquet gerado.
Raises:
FileNotFoundError: Se o arquivo de origem não existir.
ValueError: Se a extensão do arquivo não for compatível com Excel.
"""
origem = Path(caminho_origem)
if not origem.is_file():
raise FileNotFoundError(f"Arquivo de origem não encontrado: {origem}")
if origem.suffix.lower() not in [".xlsx", ".xls"]:
raise ValueError(f"Extensão não suportada para leitura Excel: {origem.suffix}")
if caminho_destino is None:
destino = origem.with_suffix(".parquet")
else:
destino = Path(caminho_destino)
# Leitura da planilha com preservação do esquema inferido
dataframe = pd.read_excel(origem, sheet_name=nome_aba)
# Exportação para Parquet via pyarrow
dataframe.to_parquet(destino, engine="pyarrow", compression=compressao, index=False)
return destino
Automatizando Processamentos em Lote
Em fluxos de ingestão contínua, os arquivos raramente chegam de forma isolada. A criação de um script de varredura automatizada permite processar diretórios inteiros sem intervenção manual:
python
def processardiretorio(diretorioentrada: Path) -> None:
“””
Localiza e converte todos os arquivos Excel de um diretório para Parquet.
“””
arquivosexcel = list(diretorioentrada.glob(“*.xlsx”))
print(f"Encontrados {len(arquivos_excel)} arquivos para conversão.")
for arquivo in arquivos_excel:
try:
saida = converter_excel_para_parquet(arquivo)
print(f"Sucesso: {arquivo.name} -> {saida.name}")
except Exception as erro:
print(f"Falha ao processar {arquivo.name}: {erro}")
if name == “main“:
pastadados = Path(“./dadosbrutos”)
if pastadados.exists():
processardiretorio(pasta_dados)
Integração com Inteligência Artificial e Engenharia de Dados
Como especialista em IA e engenharia de dados, vejo frequentemente equipes gastando horas depurando falhas de out-of-memory em pipelines de pré-processamento de machine learning causadas diretamente por leituras repetidas de arquivos Excel pesados.
Ao substituir planilhas por arquivos Parquet logo na etapa de ingestão, o tempo de carga de modelos e processamento analítico cai em até dez vezes. Além disso, bibliotecas modernas como Polars e DuckDB podem executar consultas SQL diretamente sobre esses arquivos Parquet sem a necessidade de instanciar bancos de dados dedicados.
Considerações Técnicas para Produção
Ao implementar essa solução em larga escala, considere:
- Padronização de Tipos: Se o Excel contiver colunas com tipos mistos (números e textos na mesma coluna), defina um dicionário de tipos explícito (
dtype) na leitura para evitar quebras de inferência. - Controle de Memória: Para arquivos que excedem a memória disponível, utilize abordagens como o motor de streaming do Polars ou carregadores paginados baseados em geradores.
- Organização de Partições: Caso o volume de dados seja particionado temporalmente (por ano/mês), estruture a saída Parquet em diretórios particionados seguindo a convenção Hive (
ano=2024/mes=05/).
Conclusão e Próximos Passos
A modernização do armazenamento de dados legados é um passo fundamental para viabilizar iniciativas analíticas e de inteligência artificial confiáveis. Uma rotina de automação limpa e bem documentada elimina retrabalho técnico e prepara seu ecossistema para ferramentas modernas.
Se a sua empresa precisa de apoio técnico para desenhar pipelines de dados escaláveis, automações corporativas em Python ou arquiteturas de inteligência artificial aplicadas aos seus processos de negócio, conheça nossos serviços de consultoria especializada.


