基于中文在线文档的Polars工具介绍

news/2024/10/18 7:57:46/

Polars学习简介

Polars是一个能够提取(Extract)、转换(Transform)与加载(Load)大规模数据集的工具(快速多线程、单指令多数据流、延迟/即时执行、查询优化、混合流等)。根据官方开发人员的Benchmark结果,Polars版本号为0.8.8时,能够在143s左右导入维度在1,000,000,000*9左右,内存为50GB的数据集。与此同时,Pandas在1.2.2版本导入同样的数据集会出现out of memory的报错。

  • Database-like ops benchmark
  • TPCH Benchmark results
  • pola-rs/polars-book-cn

下载Polars并与工具交互

下载最新版的Polars:

pip install polars

下载Polars相关的依赖工具:

pip install 'polars[pandas]'
# pip install 'polars[numpy, pandas, pyarrow]'

参考依赖如下:

工具名描述
all下载所有的可选择依赖(下面出现的全部选项)
pandas安装Pandas用于在Pandas数据帧/系列之间转换数据
numpy安装numpy用于将数据转换到numpy数组和从numpy数组转换数据
pyarrow使用PyArrow读取数据格式
fsspec支持从远程文件系统(remote file systems)读取
connectorx支持从SQL数据库(database)中读取
xlsx2csv支持从Excel文件(files)中读取
deltalake支持从Delta Lake表中读取
timezone时区支持,只有在Python<3.9或Windows上时才需要

从源码编译Polars

如果需要一个最前沿的版本或最大的性能,你应该从源码编译Polars。首先,使用Git版本控制工具克隆源代码仓库(但是不要把编译完成的版本发布到你的个人账号或者用于商用了):

git clone https://github.com/pola-rs/polars.git

其次下载最新版的Rust编译器(因为python版本的Polars也是以Rust高性能语言作为编程后端) → Rust compiler。
之后下载 maturin,使用如下命令:

pip install maturin

选择下面任意一个选项来编译你需要的Python版本的Polars:

  • 最新的二进制版本,较长的编译时间
$ cd py-polars && maturin develop --release -- -C target-cpu=native
  • 快的二进制版本,短些的编译时间
$ cd py-polars && maturin develop --release -- -C codegen-units=16 -C lto=thin -C target-cpu=native

用法案例

  • 构造DataFrame
df = pl.DataFrame({"A": [1, 2, 3, 4, 5],"fruits": ["banana", "banana", "apple", "apple", "banana"],"B": [5, 4, 3, 2, 1],"cars": ["beetle", "audi", "beetle", "beetle", "beetle"],"optional": [28, 300, None, 2, -30],}
)
  • 选择上下文
(df.select([pl.col("A"),"B",pl.lit("B"),pl.col("fruits"),
]))
  • 求和
(df.select([pl.col("^A|B$").sum()
]))
  • 逆序选择
(df.select([pl.all(),pl.all().reverse().suffix("_reverse")
]))
  • 广播
(df.select([pl.all(),pl.all().sum().suffix("_sum")
]))
  • 用谓词过滤
predicate = pl.col("fruits").str.contains("^b.*")df.filter(predicate)
  • 组合列
(df.select(["fruits","B",pl.when(pl.col("fruits") == "banana").then(pl.col("B")).otherwise(-1).alias("b")
]))
  • 聚合
(df.groupby("fruits").agg([pl.col("B").sum().alias("B_sum"),pl.sum("B").alias("B_sum2"),pl.first("fruits").alias("fruits_first"),pl.count(),pl.col("B").shift().alias("B_shifted")]).explode("B_shifted")
)
  • 窗口函数
(df.select(["fruits","cars","B",pl.col("B").sum().over("fruits").alias("B_sum_by_fruits"),pl.col("B").sum().over("cars").alias("B_sum_by_cars"),
]))

点这里下载可运行的Jupyter Notebook教程。

资料参考

  • Polars中文在线文档
  • polars-book-cn托管仓库
  • Polars英文在线文档(这个文档中可以看到Polars高版本出现了很多参数的变化)
  • Python编程生态中Polars的API文档

http://www.ppmy.cn/news/80299.html

相关文章

网络安全的学习路线是怎么样的?

在众多高大上的学习路线指导中,尝试做一股清流,把要讲清楚的都讲清楚,该学些什么,学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划: 1.目前市场需求主流的岗位里&#xff0…

Python3 命名空间和作用域

在Python中,命名空间(Namespace)是一个用于存储变量名称和其对应对象的系统。它提供了一种在程序中组织和访问变量的方式,以防止命名冲突并提供代码模块化的能力。 Python中的命名空间可以被视为一个字典,其中变量名称…

Android 系统内的守护进程 - main类服务(3) : installd

声明 只要是操作系统,不用说的就是其中肯定会运行着一些很多守护进程(daemon)来完成很多杂乱的工作。通过系统中的init.rc文件也可以看出来,其中每个service中就包含着系统后台服务进程。而这些服务被分为:core类服务(adbd/servicemanager/healthd/lmkd/logd/vold)和mai…

今日单词|长期主义 (Day 1)

aquifier n.含水层 replenishsupplement vt.补充 oxytocin n.催产素 heyday n.全盛时期 In its heyday, the company ran trains every fifteen minutes. desalination n. desalinate salination salinate salt n. Its too salty. savory. a.令人愉快的、可口的 savor all …

ISO证书“带标”与“不带标”的区别是什么?

ISO9001质量管理体系认证是企业产品获得“通行绿卡”的最直接最有效的途径。 通过认证在打破贸易壁垒,提高产品知名度,降低生产成本,提高经济效益,维护消费者权益,减少重复审核负担等方面的作用越来越为企业界所共知。…

计算机网络实验(ensp)-实验10:三层交换机实现VLAN间路由

目录 实验报告: 实验操作 1.建立网络拓扑图并开启设备 2.配置主机 1.打开PC机 配置IP地址和子网掩码 2.配置完成后点击“应用”退出 3.重复步骤1和2配置每台PC 3.配置交换机VLAN 1.点开交换机 2.输入命名:sys 从用户视图切换到系统视图…

【系统移植】uboot 通过 NFS 加载根文件系统(一) —— 网络环境配置

前面试过了SD卡烧录根文件系统,然后借助环境变量 bootargs 来加载SD卡中的根文件系统,但是实际开发需要经常对文件做增删改等操作,所以将根文件系统放在SD上不大合适。 因此,最常用的做法是把根文件系统放在NFS服务端&#xff08…

本地训练中文LLaMA模型实战教程,民间羊驼模型,24G显存盘它!

羊驼实战系列索引 博文1:本地部署中文LLaMA模型实战教程,民间羊驼模型 博文2:本地训练中文LLaMA模型实战教程,民间羊驼模型(本博客) 博文3:精调训练中文LLaMA模型实战教程,民间羊驼模型(马上发布) 简介 在学习完上篇【1本地部署中文LLaMA模型实战教程,民间羊驼模…