Python Data Stack 2.0: O Fim do Pandas e Pip? (Guia 2025-2026)
Source: Dev.to
Como a revolução Rust (uv, Polars) e o BigQuery transformaram a engenharia de dados.
Se você trabalha com dados em 2025, provavelmente sente que suas ferramentas antigas não acompanham o hardware moderno. O padrão “de fato” da última década — Pandas em Jupyter Notebooks instalados via Pip — tornou‑se insustentável. Estamos vivendo a transição da Era do Spark Local para a Era da Performance Nativa (Rust) e Cloud Serverless.
Este guia é um manifesto técnico para engenheiros e cientistas de dados (especialmente usuários de macOS/Apple Silicon) que querem sair do gargalo de memória e performance.
Migração da Stack “Legada” para a “Moderna”
| Categoria | O Velho Padrão (2020) | A Nova Stack (2025/26) | O Ganho Real |
|---|---|---|---|
| Gerenciador de Pacotes | pip / virtualenv / conda | uv (Astral) – instalações 10‑100× mais rápidas, cache global e resolução de conflitos determinística | |
| Processamento Local | pandas (single‑threaded) | polars (Rust‑based) – execução lazy, multithreading nativo (usa todos os núcleos do M3/M4) e memória eficiente | |
| Engine SQL Local | sqlite / csv | duckdb – OLAP local em arquivos Parquet/Iceberg com performance vetorial | |
| Big Data / Cloud | pyspark ou SQL strings | bigframes (BigQuery) – processamento de petabytes usando sintaxe Pandas, sem baixar dados para a máquina | |
| Notebooks | Jupyter clássico | marimo – notebooks reativos, armazenados como .py limpo (Git‑friendly), sem estado oculto | |
| Hardware | Intel x86 | Apple Silicon (ARM64) – memória unificada (CPU+GPU) acessível sem cópia de dados |
Gerenciamento de Dependências com uv
O gerenciamento de dependências Python sempre foi um pesadelo (“dependency hell”). O uv, escrito em Rust, substitui pip, pip‑tools, pipx, poetry e virtualenv de uma só vez.
Workflow Antigo
python -m venv venv
source venv/bin/activate
pip install pandas numpy # espera interminável...
pip freeze > requirements.txt
Workflow Moderno (uv)
# Cria venv e instala em milissegundos
uv venv
uv add polars duckdb
# Roda scripts isolados sem precisar ativar nada manualmente
uv run analise.py
Dica Pro
Com o uv, você pode criar scripts autônomos que declaram suas próprias dependências no cabeçalho. O uv baixa tudo em um ambiente temporário, executa e limpa depois.
Pandas vs. Polars
A diferença entre Pandas e Polars é arquitetural. Pandas foi construído sobre NumPy (que não lida bem com strings ou nulos) e executa tudo imediatamente (“eager”), criando cópias gigantescas na RAM.
Pandas – RAM Heavy (exemplo clássico)
import pandas as pd
# Lê 10 GB para a RAM (perigo de OOM!)
df = pd.read_csv("vendas_large.csv")
# Cria cópias intermediárias na memória
df_filtrado = df[df['regiao'] == 'Sudeste']
resultado = df_filtrado.groupby('categoria')['total'].sum()
Polars – Lazy & Streaming
import polars as pl
# scan_csv não carrega nada ainda (lazy)
query = (
pl.scan_csv("vendas_large.csv")
.filter(pl.col("regiao") == "Sudeste") # predicate pushdown: filtra no disco
.group_by("categoria")
.agg(pl.col("total").sum())
)
# Executa usando streaming (processa datasets maiores que a RAM)
resultado = query.collect(streaming=True)
Principais vantagens do Polars
- Lazy Execution – lê apenas colunas/linhas necessárias.
- Multithreading – usa todos os núcleos do chip (M3/M4/M5).
- Zero‑Copy – integração perfeita com Apache Arrow.
Big Data / Cloud com bigframes (BigQuery)
Quando os dados são grandes demais para o seu Mac, antes era preciso aprender Java/Scala para usar Spark ou escrever strings SQL enormes. Hoje, o BigQuery DataFrames permite usar a sintaxe do Pandas enquanto o processamento acontece nos clusters serverless do Google.
import bigframes.pandas as bpd
# Conecta a uma tabela de 10 TB (só baixa metadados)
df = bpd.read_gbq("meu-projeto.logs.acessos_2025")
# Parece Pandas, mas roda na nuvem do Google
df_erro = df[df['status_code'] >= 500] # predicate pushdown automático
# Agregação remota
contagem = df_erro.groupby('hora')['id'].count()
# O resultado só é baixado aqui (e é minúsculo)
print(contagem)
Marimo vs. Jupyter
Jupyter tem um problema fatal: estado oculto. Executar células fora de ordem pode mudar resultados, e o arquivo .ipynb (JSON) é difícil de versionar.
Por que escolher Marimo?
- Reativo – mudar uma variável atualiza automaticamente todas as células dependentes (como Excel).
- Python puro – o notebook é salvo como um arquivo
.py. - Git‑friendly – diffs limpos e legíveis.
Conclusão
A “Modern Data Stack” no macOS em 2026 não é sobre modismo, mas sobre eficiência de recursos:
- Computação – usar 100 % do Apple Silicon com Rust.
- Memória – zero‑copy com Arrow e Polars.
- Tempo – instalações instantâneas com uv.
Abandonar Pandas e Pip pode parecer assustador no início, mas o ganho de produtividade ao processar bilhões de linhas no seu laptop local é incomparável.
Sua próxima ação: instale o uv hoje e nunca mais olhe para trás.
curl -LsSf https://astral.sh/uv/install.sh | sh