https://github.com/Rafael-soares-oliveira/benchmark_pandas_vs_polars

pandas_vs_polars.png

Quem trabalha com dados já deve ter enfrentado esse dilema: aquele arquivo CSV que não é grande o suficiente para justificar um cluster Spark ou Dask, mas também não cabe confortavelmente no Pandas, principalmente em ambientes com recursos limitados.

No meu caso, o obstáculo era um pipeline de ETL encarregado de processar mais de 30 milhões de registros (cerca de 1GB+ compactado).

O script legado em Pandas enfrentava dois problemas clássicos:

  1. Consumo de Memória (RAM): o Pandas tradicional cria diversas cópias intermediárias dos dados. Para processar 1GB, ele sequestrava facilmente 7GB de RAM, levando a erros de Out-of-Memory¹ (OOM) em ambientes com recursos limitados.
  2. Performance: execução single-core, deixando ociosos os outros núcleos da CPU.

Para driblar o gargalo de memória, decidi experimentar o Polars, uma biblioteca que vem ganhando espaço como alternativa ao Pandas. Ele traz ganhos reais de eficiência, mas ainda carrega algumas limitações frente ao veterano:

Código em Pandas - Autor

Código em Pandas - Autor

Código em Polars - Autor

Código em Polars - Autor

Para avaliar de fato o impacto, preparei um benchmark comparando Pandas e Polars. O objetivo era claro: