Polars是一个用于数据操作和分析的开源库,旨在高效处理大型数据集。它使用Rust编写,提供了类似于pandas的DataFrame API,但更注重性能和可扩展性。Polars支持即时执行和惰性执行,允许用户构建在执行前经过优化的查询计划。它广泛应用于数据科学和机器学习工作流中的数据预处理和特征工程。
该项目由Ritchie Vink发起,于2020年发布了第一个版本。此后,Polars因其速度和内存效率而广受欢迎,在处理大型数据集时往往优于传统工具。它支持多种编程语言,包括Python、Rust和JavaScript(通过Node.js),并能与其他数据科学工具良好集成。
架构与设计
Polars基于Apache Arrow构建,这是一种内存中的列式格式,能够实现高效的数据处理。该库利用Rust的内存安全性和并发特性来实现高性能。其核心设计包括向量化执行引擎和查询优化器,可以重排操作、下推谓词并消除不必要的计算。Polars同时支持惰性API和即时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颗星,并拥有专门的用户群体。该库持续发展,定期发布新功能和性能改进。