数据STUDIO

不再使用 pandas,7 个 Python 库太棒了

Image

Image
Image

我猜你已经和 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 -设为星标,干货速递ImageImage