Vaex 是一个高性能 Python 库,专为惰性、核外(out-of-core)DataFrame 设计,用于处理和可视化无法装入内存的表格数据集。官方称其每秒可处理超过十亿行,支持对数十亿行数据集进行交互式探索与分析。
用途
Vaex 适用于以下场景:处理大于可用内存(从 GB 到 TB 级)的表格数据集;对海量数据执行快速统计聚合;为大型数据集创建可视化与热力图;在大数据上构建机器学习流水线;在 CSV、HDF5、Arrow、Parquet 等格式之间转换;需要惰性求值与虚拟列以避免内存开销;处理天文数据、金融时间序列或其他大规模科学数据集。
与其他工具的取舍:当数据可装入内存且需要最大内存内速度时使用 polars;当需要跨集群分布式运行 pandas/NumPy 时使用 dask;当需要在单机上通过内存映射的 HDF5/Arrow 文件对超出内存的表格数据做核外分析时使用 vaex。
安装
安装完整元包(推荐):
uv pip install vaex
最小化安装(按需选择):
uv pip install vaex-core vaex-viz vaex-hdf5 vaex-ml
vaex 是元包,会引入 vaex-core、vaex-viz、vaex-hdf5、vaex-ml 及其他子包。Arrow 支持已内置于 vaex-core(独立的 vaex-arrow 包已弃用)。vaex-distributed 已弃用,改用 vaex-enterprise。
版本说明(vaex 4.19.0+):Python 3.12 与 NumPy v2 需要 vaex >= 4.19.0。在 Windows 上,构建 annoy 依赖可能需要 Python 开发头文件。
主要能力
Vaex 提供六大能力领域,每项在 references 目录中有详细文档:
-
DataFrame 与数据加载:从文件(HDF5、CSV、Arrow、Parquet)、pandas DataFrame、NumPy 数组和字典加载或创建 Vaex DataFrame,包括高效打开大文件、从 pandas/NumPy/Arrow 转换、使用示例数据集、理解 DataFrame 结构。
-
数据处理与操作:执行过滤、创建虚拟列、使用表达式和聚合数据,而无需将全部数据载入内存,包括过滤与选择、虚拟列与表达式、groupby 操作与聚合、字符串操作与日期时间处理、缺失值处理。
-
性能与优化:利用惰性求值、缓存策略和内存高效操作,包括理解惰性求值、使用 delay=True 批处理操作、按需物化列、缓存策略、异步操作。
-
数据可视化:为大型数据集创建交互式可视化,包括热力图、直方图和散点图,涵盖一维与二维绘图、热力图可视化、与选择配合、自定义图表与子图。
-
机器学习集成:使用转换器、编码器构建 ML 流水线,并与 scikit-learn、XGBoost 等框架集成,包括特征缩放与编码、PCA 与降维、K-means 聚类、与 scikit-learn/XGBoost/CatBoost 集成、模型序列化与部署。
-
I/O 操作:以最佳性能高效读写各种格式,包括文件格式建议、导出策略、Apache Arrow 使用、大文件 CSV 处理、服务器与远程数据访问。
使用方式
大多数 Vaex 任务遵循以下模式:
import vaex
1. 打开或创建 DataFrame
df = vaex.open('large_file.hdf5') # 或 .csv、.arrow、.parquet
或者
df = vaex.from_pandas(pandas_df)
2. 探索数据
print(df) # 显示首尾行与列信息 df.describe() # 统计摘要
3. 创建虚拟列(无内存开销)
df['new_column'] = df.x ** 2 + df.y
4. 使用选择进行过滤
df_filtered = df[df.age > 25]
5. 计算统计量(快速、惰性求值)
mean_val = df.x.mean() stats = df.groupby('category').agg({'value': 'sum'})
6. 可视化(自 vaex 4.0 起推荐使用 df.viz 访问器)
df.viz.heatmap(df.x, df.y, limits='99.7%', show=True)
旧版:df.plot1d() 与 df.plot() 仍可在 DataFrame 上使用
7. 按需导出
df.export_hdf5('output.hdf5')
参考文档使用建议:基础操作从 references/core_dataframes.md 与 references/data_processing.md 开始;性能问题查看 references/performance.md;可视化任务使用 references/visualization.md;ML 流水线参考 references/machine_learning.md;文件 I/O 查阅 references/io_operations.md。
最佳实践
使用 HDF5 或 Apache Arrow 格式以获得大数据集的最佳性能;利用虚拟列而非物化数据以节省内存;执行多个计算时使用 delay=True 批处理操作;导出为高效格式而非将数据保留在 CSV 中;使用表达式进行复杂计算而无需中间存储;使用 df.describe() 与 df.nbytes 分析数据形状与内存占用。
常见模式
将大 CSV 转换为 HDF5:
import vaex
惰性打开大 CSV(vaex 4.14+),或使用 from_csv 转换为 HDF5
df = vaex.open('large_file.csv')
df = vaex.from_csv('large_file.csv', convert='large_file.hdf5')
导出为 HDF5 以便后续更快访问
df.export_hdf5('large_file.hdf5')
后续加载即时完成
df = vaex.open('large_file.hdf5')
高效聚合:
使用 delay=True 批处理多个操作
mean_x = df.x.mean(delay=True) std_y = df.y.std(delay=True) sum_z = df.z.sum(delay=True)
一次性执行
results = vaex.execute([mean_x, std_y, sum_z])
用于特征工程的虚拟列:
无内存开销——即时计算
df['age_squared'] = df.age ** 2 df['full_name'] = df.first_name + ' ' + df.last_name df['is_adult'] = df.age >= 18
适用场景与限制
适用场景包括超出内存的表格数据分析、大规模统计聚合、大数据可视化、大数据机器学习流水线、格式转换以及天文、金融等大规模科学数据处理。限制方面:Vaex 面向单机核外分析,若数据可装入内存且追求最大内存内速度,可考虑 polars;若需要跨集群分布式计算,可考虑 dask。版本相关细节可能过时,应以所安装版本的官方文档为准。
相关技能
polars:用于 Python ETL、分析与 pandas 迁移的高性能 DataFrame 库。polars-bio:基于 Arrow 与 DataFusion 构建、用于 Polars DataFrame 上基因组区间操作与生物信息学文件 I/O 的 Python 库。dask:面向超出内存的 pandas/NumPy 工作流的分布式计算。