Polars是一个用于数据操作和分析的开源库,旨在高效处理大型数据集。它基于Rust编写,提供了类似于pandas的DataFrame API,但更注重性能和可扩展性。Polars支持即时(eager)和惰性(lazy)两种执行模式,允许用户构建在执行前经过优化的查询计划。它广泛应用于数据科学和机器学习工作流中的数据预处理和特征工程。
该项目由Ritchie Vink发起,首个版本于2020年发布。此后,Polars因其速度和内存效率而广受欢迎,在处理大型数据集时通常优于传统工具。它支持多种编程语言,包括Python、Rust和JavaScript(通过Node.js),并能与其他数据科学工具良好集成。
架构与设计
Polars基于Apache Arrow构建,这是一种内存中的列式格式,能够实现高效的数据处理。该库利用了Rust的内存安全性和并发特性来实现高性能。其核心设计包括向量化执行引擎和查询优化器,后者可以重排操作、下推谓词并消除不必要的计算。Polars同时支持惰性和即时API:惰性API允许用户定义查询计划,该计划仅在需要时进行优化和执行;而即时API则立即执行操作。
主要特性
Polars提供了丰富的数据操作功能,包括过滤、分组、连接、重塑和时间序列操作。它支持复杂的数据类型,如嵌套列表、结构体和分类数据。该库还提供了基于表达式的语法,使得转换操作简洁且可组合。在机器学习预处理方面,Polars包含处理缺失数据、缩放和编码分类变量的工具。它可以读写多种文件格式,包括CSV、Parquet、JSON和Arrow IPC。
性能与可扩展性
Polars的主要优势之一是其性能。它利用多线程在CPU核心上并行化操作,其查询优化器可以通过在可能时流式处理数据来减少内存使用。基准测试表明,在处理大型数据集时,Polars通常优于pandas,有时甚至快几个数量级。Polars可以通过使用外部执行来处理超出可用RAM的数据集,尽管这比Apache Spark等分布式系统更为有限。
生态系统与集成
Polars与更广泛的数据科学生态系统集成良好。它可以与Pandas和Numpy数组进行DataFrame转换,并支持与apache-arrow的互操作性。在机器学习工作流中,Polars常与scikit-learn和TensorFlow一起用于数据准备。该库还拥有不断增长的扩展和工具生态系统,例如polars-lazy用于高级查询优化,以及polars-xdt用于额外的日期时间工具。
采用与社区
自发布以来,Polars已被金融、医疗和技术等多个行业的数据科学家和工程师采用。Amazon Web Services和Google Cloud等公司在数据处理流程中使用它。该项目在GitHub上积极维护,拥有来自全球社区的贡献。截至2024年,Polars在GitHub上已获得超过20,000颗星,并拥有专门的用户群体。该库持续发展,定期发布新版本以增加功能和性能改进。
另见
- dataframe
- data-manipulation
- Machine learning
- apache-arrow
- Pandas