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允许用户定义查询计划,并在执行前进行优化;即时API则立即执行操作。
主要特性
Polars提供了丰富的数据操作功能,包括过滤、分组、连接、重塑和时间序列操作。它支持复杂的数据类型,如嵌套列表、结构体和分类数据。该库还提供了基于表达式的语法,使得转换操作简洁且可组合。在机器学习预处理方面,Polars包含了处理缺失数据、缩放和编码分类变量的工具。它可以读写多种文件格式,包括CSV、Parquet、JSON和Arrow IPC。
性能与可扩展性
Polars的主要优势之一是其性能。它利用多线程在CPU核心上并行化操作,其查询优化器可以通过流式处理数据来减少内存占用。基准测试表明,在处理大型数据集时,Polars通常比pandas快数个数量级。Polars能够处理超出可用RAM的数据集,通过使用核外执行(out-of-core execution)来实现,不过这比Apache Spark等分布式系统的能力要有限。
生态系统与集成
Polars与更广泛的数据科学生态系统集成良好。它可以与Pandas和Numpy数组相互转换DataFrame,并支持与Apache Arrow的互操作性。在机器学习工作流中,Polars常与scikit-learn和TensorFlow一起使用,用于数据准备。该库还拥有一个不断增长的扩展和工具生态系统,例如polars-lazy用于高级查询优化,polars-xdt用于额外的日期时间工具。
采用与社区
自发布以来,Polars已被金融、医疗保健和技术等各个行业的数据科学家和工程师所采用。Amazon Web Services和Google Cloud等公司在其数据处理管道中使用Polars。该项目在GitHub上积极维护,拥有来自全球社区的贡献。截至2024年,Polars在GitHub上已获得超过20,000颗星,并拥有专门的用户群。该库持续发展,定期发布新版本,添加新功能并改进性能。
参见
- dataframe
- data-manipulation
- Machine learning
- apache-arrow
- Pandas