Python Data Stack 2.0:Pandas 与 pip 的终结?(2025-2026 指南)
Source: Dev.to
Rust(uv、Polars)革命以及 BigQuery 如何改变了数据工程。
如果你在 2025 年从事数据工作,可能会觉得旧工具跟不上现代硬件的速度。过去十年实际的标准——通过 Pip 安装的 Jupyter Notebook 中的 Pandas——已变得难以维系。我们正经历从 本地 Spark 时代 向 本地性能(Rust)和云无服务器时代 的转变。
本指南是面向工程师和数据科学家(尤其是 macOS/Apple Silicon 用户)的技术宣言,帮助他们摆脱内存和性能瓶颈。
从“传统”堆栈迁移到“现代”堆栈
| 类别 | 旧标准(2020) | 新堆栈(2025/26) | 实际收益 |
|---|---|---|---|
| 包管理器 | pip / virtualenv / conda | uv (Astral) – 安装速度提升 10‑100×,全局缓存,冲突解决确定性 | |
| 本地处理 | pandas (single‑threaded) | polars (Rust‑based) – 惰性执行,原生多线程(使用所有 M3/M4 核心)和内存高效 | |
| 本地 SQL 引擎 | sqlite / csv | duckdb – 在 Parquet/Iceberg 文件上的本地 OLAP,具备向量化性能 | |
| 大数据 / 云 | pyspark ou SQL strings | bigframes (BigQuery) – 使用 Pandas 语法处理 PB 级数据,无需将数据下载到本机 | |
| 笔记本 | Jupyter 经典 | marimo – 响应式笔记本,存为干净的 .py(Git‑友好),无隐藏状态 | |
| 硬件 | Intel x86 | Apple Silicon (ARM64) – 统一内存(CPU+GPU)可直接访问,无需复制数据 |
使用 uv 进行依赖管理
Python 的依赖管理一直是个噩梦(“dependency hell”)。用 Rust 编写的 uv 能一次性取代 pip、pip‑tools、pipx、poetry 和 virtualenv。
旧的工作流
python -m venv venv
source venv/bin/activate
pip install pandas numpy # 无尽的等待...
pip freeze > requirements.txt
现代工作流(uv)
# 创建 venv 并在毫秒级完成安装
uv venv
uv add polars duckdb
# 运行隔离的脚本,无需手动激活
uv run analise.py
高级技巧
使用 uv,你可以创建声明自身依赖的独立脚本。uv 会在临时环境中下载所有依赖,执行完毕后自动清理。
Pandas 与 Polars
Pandas 与 Polars 的区别在于架构。Pandas 基于 NumPy 构建(NumPy 对字符串或空值的处理不佳),并且立即执行(“eager”),在 RAM 中创建巨大的副本。
Pandas – 高内存占用(经典示例)
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 – 惰性 & 流式
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)
Polars 的主要优势
- 惰性执行 – 只读取必要的列/行。
- 多线程 – 使用芯片的所有核心(M3/M4/M5)。
- 零拷贝 – 与 Apache Arrow 完美集成。
大数据 / 云端使用 bigframes(BigQuery)
当数据大到你的 Mac 处理不了时,以前需要学习 Java/Scala 来使用 Spark,或者编写巨大的 SQL 字符串。现在,BigQuery DataFrames 让你可以使用 Pandas 语法,而处理工作在 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 与 Jupyter 对比
Jupyter 有一个致命问题:隐藏状态。如果不按顺序运行单元格,可能会改变结果,而 .ipynb 文件(JSON)难以进行版本控制。
为什么选择 Marimo?
- 响应式 —— 改变变量会自动更新所有依赖的单元格(类似 Excel)。
- 纯 Python —— 笔记本保存为
.py文件。 - Git 友好 —— 差异(diff)清晰可读。
结论
“Modern Data Stack” 在 2026 年的 macOS 并不是潮流,而是关于 资源效率:
- 计算 – 使用 100 % 的 Apple Silicon 与 Rust。
- 内存 – 使用 Arrow 和 Polars 的零拷贝。
- 时间 – 使用 uv 实现即时安装。
放弃 Pandas 和 Pip 起初可能会让人感到害怕,但在本地笔记本上处理数十亿行数据所带来的生产力提升是无可比拟的。
你的下一步行动: 今天就安装 uv,永不回头。
curl -LsSf https://astral.sh/uv/install.sh | sh