不再使用 pandas,7 个 Python 库太棒了
我猜你已经和 Pandas 较劲儿有一段时间了。也许你是那种df.groupby(...).agg(...) 闭着眼睛都能写代码的开发者。又或许你正在研究为什么Pandas.apply() 比周日的树懒还要慢。
无论如何——如果你一直用 Python 做数据工作,Pandas 可能是你的首选。但即使是最好的关系也有其局限性。
说实话:Pandas 功能强大,没错——但功能臃肿。有些操作慢得要命。其他操作……简直让人摸不着头脑。更别提那个可怕的 SettingWithCopyWarning了。
于是我开始寻找。我需要一些能给我带来速度、清晰度和乐趣的工具。在尝试了所有号称“比 Pandas 更快”的库多年之后,我找到了 7 个让我不再需要 Pandas 的工具。
1. Polars — 增强版 Pandas(用 Rust 编写)
import polars as pl
df = pl.read_csv('data.csv')
df.filter(pl.col('age') > 30).groupby('job').agg(pl.col('salary').mean())
为什么它具有颠覆性:
Polars 速度惊人——在大数据方面,它比 Pandas快 10 到 30 倍。它用 Rust 编写(也就是说,效率惊人),其惰性求值引擎意味着它会在运行整个查询链之前对其进行优化。
更好的地方:
默认多线程 可预测的行为(没有 SettingWithCopy 的废话) 内置表达式语法(就像 SQL 与 NumPy 的结合)
2. Vaex — 海量数据集的惰性求值
import vaex
df = vaex.open('bigdata.hdf5')
df[df.x > 0].mean('y')
杀手级功能:
Vaex 不会将完整数据集加载到内存中。它处理核外计算,使其成为处理数十亿行数据的理想选择,无需服务器集群。
何时使用:
你的内存正在崩溃 你想要交互速度,但又不想有数据库级别的复杂性
3. Modin — 简易替换,大幅提速
import modin.pandas as pd
df = pd.read_csv("huge_file.csv")
df.groupby("category")["price"].mean()
无需重构。Modin使用Ray 或 Dask
在底层对 Pandas 进行并行化。只需更改导入行,即可立即扩展到多核。
何时使用:
你的代码都是用pandas编写的 而你又想要快速且无需重写
Modin 可以在几秒钟内处理 4GB 的 CSV ,而使用 Pandas 则需要几分钟——而且你无需更改任何一行逻辑。
4. Datatable — 因为 RAM 不是无限的
import datatable as dt
df = dt.fread("data.csv")
df[:, dt.mean(dt.f.col1), dt.by("group")]
想想:R 语言data.table,但针对的是 Python,Datatable
专为速度和低内存开销而构建,能够轻松处理大型 CSV 文件,并像冠军一样处理分类数据。
优势:
大规模数据摄取 为机器学习管道准备海量数据集
5. PyArrow——互操作性的支柱
import pyarrow as pa
table = pa.csv.read_csv('data.csv')
batch = table.to_batches()[0]
这有什么大不了的?
如果你关心系统间(例如 Python ⇄ Spark ⇄ R)的零拷贝数据共享,PyArrow 就是你的秘密武器。它是Apache Arrow格式的核心——它正在改变数据的传输方式。
何时使用:
数据管道(ETL、流式传输) 与 DuckDB 等 Arrow 原生工具交互
注意: PyArrow 并不适合所有人——它是低级的,但如果你想构建严肃的数据引擎,它是必不可少的。
6. DuckDB — SQLite,但用于分析
import duckdb
result = duckdb.query("SELECT job, AVG(salary) FROM 'data.csv' GROUP BY job").to_df()
特殊之处:
DuckDB 是一个进程内 OLAP 数据库——类似于 SQLite,但用于分析。你可以直接使用 SQL 查询Parquet、CSV 和 Arrow 文件,而无需将它们加载到内存中。
何时使用:
用于分析的快速、可嵌入的 SQL 非常适合 Jupyter、小型仪表板和微服务 无需设置服务器,无需配置 — 只需运行
在 15 项基准测试的筛选、分组和连接任务中, DuckDB 在 13 项中均胜过 Pandas 。而且,它读取 Parquet 的能力与生俱来。
7. Koalas(现为 PySpark 的一部分)——Spark for Humans
import pyspark.pandas as ps
psdf = ps.read_csv("bigdata.csv")
psdf.groupby("region")["sales"].sum()
重要性:
Koalas(现隶属于pyspark.pandas)将 Pandas 语法引入 Spark。这意味着你可以将笔记本扩展到 Spark 集群,而无需从头开始重写所有内容。
何时使用:
你正在处理分布式数据(例如 TB) 你需要 Pandas 的感觉,但 Spark 的力量
🏴☠️宝藏级🏴☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递