核心内容

当数据量超出单机 pandas 能力时,可集成 Dask、Modin、Vaex 处理超大数据集,以及与 Polars 互转获得更优性能。

一、与 Dask 集成

Dask 提供 DataFrame 的并行化版本,支持多核、分布式、超出内存的数据集。

import dask.dataframe as dd
 
# 从 pandas 创建
pdf = pd.DataFrame({'a': range(100), 'b': range(100)})
ddf = dd.from_pandas(pdf, npartitions=4)
 
# 直接读取大型 CSV(自动分块并行)
ddf = dd.read_csv('huge_*.csv')
 
# 延迟计算:链式操作不会立即执行
result = ddf.groupby('group')['value'].sum()
 
# 触发计算并转回 pandas
pdf_result = result.compute()
Dask 特性说明
惰性求值操作先构建计算图,compute() 时才执行
分区并行按 npartitions 自动并行
超出内存数据可在磁盘 / 分布式存储
类 pandas APIgroupby / merge / apply 均可使用

转换

# pandas → dask
ddf = dd.from_pandas(df, npartitions=8)
 
# dask → pandas
df = ddf.compute()

二、与 Modin 集成

Modin 通过 Ray 或 Dask 后端并行化 pandas API,几乎无需改代码。

# 安装:pip install "modin[ray]"  或  "modin[dask]"
import modin.pandas as pd   # 直接替换 pandas
 
# 用法与 pandas 相同,底层自动并行
df = pd.read_csv('huge.csv')
result = df.groupby('group')['value'].sum()
# 设置后端
export MODIN_ENGINE=ray       # 或 dask
export MODIN_NPARTITIONS=16   # 分区数

适用性

Modin 对常见 DataFrame 操作(read_csv、apply、groupby)有较好加速;个别操作仍可能回退到 pandas 单线程。

三、与 Vaex 集成

Vaex 专为超大表格设计,采用**内存映射(memory-mapped)**技术,可秒级打开百 GB 级 HDF5 / Arrow 文件。

import vaex
 
# 从 pandas 转换
vdf = vaex.from_pandas(df)
 
# 打开大型 HDF5 / Arrow 文件
vdf = vaex.open('huge.hdf5')
 
# Vaex 惰性表达式
result = vdf[vdf['value'] > 100].groupby(vdf['group'], agg='mean')
 
# 转回 pandas
pdf = vdf.to_pandas_df()
特性说明
惰性求值表达式延迟到需要时计算
零拷贝内存映射,不占额外内存
支持超大文件数百 GB 级
内置可视化vdf.plot() 快速探索

四、与 Polars 转换

Polars 是 Rust 实现的极速 DataFrame 库,与 pandas 双向转换非常容易。

Polars → pandas

import polars as pl
 
# 构建 Polars DataFrame
pdf = pl.DataFrame({
    'a': [1, 2, 3],
    'b': ['x', 'y', 'z']
})
 
# 转换为 pandas
df = pdf.to_pandas()

pandas → Polars

# 方式 1:自动推断 dtype
pldf = pl.from_pandas(df)
 
# 方式 2:指定 schema(推荐,避免 object 推断开销)
pldf = pl.from_pandas(df, schema_overrides={'id': pl.Int32})
 
# 方式 3:通过 Arrow 零拷贝(推荐大数据量)
import pyarrow as pa
arrow_table = pa.Table.from_pandas(df)
pldf = pl.from_arrow(arrow_table)
 
# 方式 4:将 pandas 对象放入 Polars 名前空间
pldf = df.to_polars()   # pandas 2.3 内置

性能对比建议

场景推荐
常规分析(< 内存)pandas
超大数据(> 内存)Dask / Vaex
追求极致单机性能Polars
并行 applyModin / swifter
大规模字符串处理Polars 或 PyArrow 字符串

在 pandas 中调用 Polars 加速

# 将复杂 chain 操作转 Polars 执行后转回
import polars as pl
df = pl.from_pandas(df) \
       .filter(pl.col('a') > 0) \
       .group_by('b') \
       .agg(pl.col('c').mean()) \
       .to_pandas()

相关笔记