Vaex Python入门

2025年4月11日 | 阅读 7 分钟

Vaex 是一个高性能的 Python 模块,用于处理大型数据集。它使用户能够有效地处理、检查和分析无法完全加载到内存中的数据,而无需将其分散到集群中。Vaex 的“外核” DataFrame 功能使其特别适合处理海量数据集(多达数十亿行),同时消耗最少的内存。

Vaex 的主要特点

  1. 外核 DataFrame(Out-of-Core DataFrame): Vaex 使用内存映射文件来处理过大而无法放入内存的数据集。它使您能够在不占用大量 RAM 的情况下对大型数据集执行操作。
  2. 惰性求值(Lazy Evaluation): Vaex DataFrame 上的操作是惰性求值的,这意味着计算仅在需要结果时执行。这可以最大限度地减少不必要的计算,同时提高速度。
  3. 快速过滤和分组: Vaex 的高级 C/C++ 后端支持快速数据过滤、分组和聚合。
  4. 可视化: Vaex 与流行的绘图库集成良好,并提供了可视化大型数据集的便捷方法。
  5. 高效的 I/O 操作: Vaex 可以以多种格式读取和写入数据,包括 CSV、HDF5、Parquet、Bolt 和 FITS,并注重速度和内存效率。

为什么要使用 Vaex?

  1. 可伸缩性: 它可以处理海量数据集(多达数十亿行),而不会遇到内存限制。
  2. 速度: 过滤、分组和聚合都以优化的速度进行,对于海量数据集来说,它比 Pandas 等传统工具更快。
  3. 易于使用: 对于使用过 Pandas 或其他 DataFrame 工具的用户来说,Vaex 的界面很熟悉,可以轻松迁移。
  4. 无需集群: 与 Dask 不同,Vaex 不需要您设置分布式计算集群,这使得在单台机器上处理海量数据集更加容易。

安装

您可以使用 pip 安装 Vaex

语法

Vaex 的基本操作

让我们来看一些 Vaex 的基本功能,从创建 DataFrame 到执行操作。

1. 加载数据

Vaex 支持加载多种格式的数据,包括 CSV、HDF5 和 Parquet。以下是加载 CSV 文件的示例:

语法

2. 创建 DataFrame

您还可以像在 Pandas 中一样,使用数组手动创建 DataFrame。

语法

3. 基本数据探索

Vaex 允许您以与 Pandas 类似的方式探索数据。

语法

4. 过滤数据

Vaex 根据条件高效地过滤行。

语法

5. 添加新列

在 Vaex 中添加列很简单,并且计算效率很高。

语法

6. 惰性操作

Vaex 的一个关键优势是其惰性求值。当您执行操作时,Vaex 不会立即计算结果,而是将其记录下来,以便在需要时稍后计算。这减少了计算时间和资源消耗。

语法

7. GroupBy 操作

GroupBy 操作也经过优化以提高性能。

语法

8. 可视化

Vaex 与 Matplotlib 等库集成,方便数据可视化,特别是对于大型数据集。

语法

9. 导出数据

DataFrame 可以导出为多种格式,包括 HDF5、Bolt 和 CSV。

语法

示例代码

输出

 
  #    x    y    z
  0    1    5    10
  1    2    4    20
  2    3    3    30
  3    4    2    40
  4    5    1    50

  #    x    y    z
  0    1    5    10
  1    2    4    20
  2    3    3    30

  #    x    y    z    sum_xy    square_x
  0    1    5    10   6         1
  1    2    4    20   6         4
  2    3    3    30   6         9
  3    4    2    40   6        16
  4    5    1    50   6        25   

Vaex 与 Pandas 对比

  • Vaex 使用外核处理,允许它通过使用磁盘空间来处理大于您机器 CPU RAM 的数据集,而 Pandas 则要求数据集完全适合内存。
  • 得益于惰性求值和优化计算,Vaex 对于海量数据集(数百万到数十亿行)来说速度更快,而 Pandas 速度较慢,因为它执行的是实时、内存内操作。
  • Vaex 采用惰性求值方法,这意味着操作仅在需要时计算,而 Pandas 则实时计算操作。
  • Vaex 可有效扩展以适应包含数十亿行的 Datsat,但 Pandas 受限于可用 RAM,因此不适合真正的大型数据集。
  • Vaex 原生支持 HDF5、Apache Arrow、Parquet 和 CSV 等海量数据集格式,而 Pandas 支持 CSV、Excel、HDF5、SQL 和 Parquet,但缺乏外核功能。
  • Vaex 为大型数据集提供了高效的绘图工具,包括一维和二维直方图以及密度图,而 Pandas 为小型数据集提供了基本的绘图功能。
  • Vaex 旨在对大型数据集执行 group-by 和聚合操作,而 Pandas 对于更大的数据集会变得更慢、更耗费内存。

10. 高效的内存管理

Vaex 使用内存映射技术,允许它直接从磁盘读取数据,而无需将其完全加载到内存中。这使其成为处理超大型数据集的理想选择。Vaex 利用 HDF5 和 Arrow 格式实现高效的 I/O 操作。

例如,当您使用 vaex.open()(用于 HDF5 或 Arrow 格式)将数据集加载到 Vaex 中时,文件仍然保留在磁盘上,但您可以像它完全加载到内存中一样执行操作。

语法

11. 高级表达式和转换

Vaex 允许您惰性地评估复杂的表达式、数值运算和转换。例如,您可以轻松地对整列执行向量化操作。

字符串操作

Vaex 支持高效的字符串操作。支持以下字符串函数:

lower(), upper(), 和 contains()。

语法

12. 连接和合并

Vaex 支持对大型数据集进行高效的连接和合并,这在其他工具中可能非常耗费内存。您可以执行左连接、右连接、内连接和外连接。

语法

13. 处理分类数据

Vaex 支持分类数据类型,这在处理包含重复值(例如姓名或商品类别)的海量数据集时非常有用。分类数据通过 Vaex 使用数字表示形式编码重复值,从而提高了内存效率。

语法

14. 导出和保存数据

在完成数据集的分析或转换后,您可能需要存储结果。Vaex 可以将数据导出为多种格式,包括 CSV、HDF5 和 Parquet。

语法

15. 使用 Vaex 进行机器学习

Vaex 通过支持多种 scikit-learn 的 transformer 和 estimator 与机器学习工作流程集成。Vaex DataFrame 可用于训练机器学习模型,以及在训练过程中处理海量数据集。

与 Scikit-Learn 集成

Vaex 可用于在应用 scikit-learn 模型之前准备数据。

语法

16. 时间序列

Vaex 提供时间序列数据操作,包括高效的日期和时间处理、基于时间的排序以及基于时间的聚合。

语法

数据过滤数据

代码

输出

 
  #    x    y    z    sum_xy    square_x
  0    3    3    30   6         9
  1    4    2    40   6        16
  2    5    1    50   6        25   

使用惰性表达式

代码

输出

 
0.8465735902799726  # Mean of the log values of column 'x'   

时间序列数据

代码

输出

 
  #    timestamp     value    year    month
  0    2024-01-01   10       2024    1
  1    2024-01-02   20       2024    1
  2    2024-01-03   30       2024    1   

这些示例突出了 Vaex 通过过滤、分组、聚合、绘图、惰性求值和导出等功能高效处理海量数据集的能力。即使这些数据集很小,Vaex 也能以同等的效率处理更多、更大的数据集。

结论

总之,Vaex 是一个先进的 Python 库,专为高效处理和分析超出您系统内存的海量数据集而设计。Vaex 使用外核处理和惰性求值,可以在处理包含数十亿行的 Datsat 时执行过滤、聚合和连接等高级数据操作,同时保持出色的性能。它与其他库(如 Scikit-learn)的无缝集成,以及对多种文件格式(例如 HDF5、Arrow、Parquet)的支持,使其成为海量数据分析、可视化和机器学习工作流程的通用工具。Vaex 在可伸缩性和内存效率至关重要的情况下特别有用,为处理海量数据集提供了 Pandas 的实用替代方案。