开发者生态
morning
Python Polars Cheatsheet(基于我们的 O'Reilly 书)
摘要
Polars is a library for transforming, analyzing, and visualizing data with a fast and expressive DataFrame API. It was first released by Ritchie Vink in 2020. Install Polars with all of its optional d...
and
DataFrame
Polars
the
Series
data
with
all
from
fruit
2026-08-18
1 阅读
约8分钟阅读
jeroenjanssens
字号:
Polars 是一个使用快速且富有表现力的 DataFrame API 来转换、分析和可视化数据的库。它由 Ritchie Vink 于 2020 年首次发布。从终端安装 Polars 及其所有可选依赖项: uv pip install "polars[all]" 在 Python 中导入 Polars,并确认已安装的 Polars 版本及其依赖项: import Polars as pl pl 。 show_versions () Polars 查询通常读取数据、转换数据,然后将结果写回。完整的查询通常是单个方法调用链:fruit = pl。 read_csv("fruit.csv") 水果。过滤器 (( pl .col ("权重") > 1000 ) & pl .col ("is_round" ) ) 。 write_parquet ( "fruit.parquet" ) 在整个备忘单中, df 是一个 DataFrame , lf 是一个 LazyFrame , o 是与 df 组合的第二个 DataFrame , e 代表任何表达式。因此 e.abs() 的意思是“在表达式上调用 .abs()”,如 pl.col("x").abs() 中所示。数据结构 # Polars 将其所有数据存储在 Series 或 DataFrame 中。结构描述 系列 一维。保存相同数据类型的值序列。二维数据框。有行和列。一个或多个系列,全部长度相同。 LazyFrame 类似于 DataFrame 但不保存数据。用于生成 DataFrame 的蓝图。与 pandas 不同,Polars DataFrames 没有行索引,并且 API 更倾向于不变性和方法链接而不是就地修改。通过传递名称和值序列创建一个系列:series = pl。 Series ( "sales" , [ 150.00 , 300.00 , 250.00 ]) 从列字典创建一个 DataFrame,其中每个值都是一个 Series 或纯 Python 序列。您还可以使用任何 pl.read_*() 函数从文件创建一个: df = pl 。 DataFrame ({ "sales" : series , "id" : [ 41 , 42 , 43 ] }) 因为没有行索引,所以在需要时显式添加一个作为列:将 DataFrame 转换为 LazyFrame。或者,直接使用任何 pl.scan_*() 函数从 LazyFrame 开始: Eager 和 Lazy API # eager API 立即执行,而惰性 API 首先构建优化的查询计划。优化器自动应用谓词下推(尽早过滤)和投影下推(删除从未使用过的列)。您可以使用 .lazy() 和 .collect() 在两种表示形式之间移动:.lazy() 将 DataFrame 转换为 LazyFrame,而 .collect() 执行 LazyFrame 并返回 DataFrame。将 DataFrame 转为 LazyFrame,并执行 LazyFrame 得到 DataFrame: lf = df 。惰性 () df = lf 。 collect() 使用流引擎在核外处理数据,这样大于内存的数据集仍然可以处理: lf 。 collect (engine = "streaming") 将优化后的查询计划打印为文本,或将其可视化为图形,以查看优化器决定执行的操作: lf 。解释一下 () lf . show_graph () 执行查询并返回每个节点的计时,这会告诉您时间实际去向: 数据类型 # Polars 实现了大部分 Apache Arrow 内存规范,这是一种适用于平面和分层数据的高效列格式。组类型 注释 数字 十进制 128 位、精度、小数位数 Float32 范围 ±3.4×10³⁸ Float64 范围 ±1.8×10³⁰⁸ Int8 范围 ±128 Int16 范围 ±32,768 Int32 范围 ±2.1×10⁹ Int64 范围 ±9.2×101⁸ Int128 范围±3.4×10³⁸ UInt8 范围 0–255 UInt16 范围 0–65,535 UInt32 范围 0–4.3×10⁹ UInt64 范围 0–1.8×10^⁹ 时间日期 自 Unix 纪元以来的天数 日期时间 自纪元以来的微秒 持续时间 持续时间/增量 时间 一天中的时间 嵌套数组 固定长度序列 列表 可变长度序列 结构 具有名称的多个字段 String String UTF-8 文本,可变长度 字符串的分类字典 Enum 字符串的固定字典 其他布尔 True / False 二进制原始字节 Null 表示 Null / None 检查类型 # 获取列名称和数据类型的字典,或仅数据类型列表:每列打印一行,包括数据类型,这对于打印 DataFrame 本身不可读的宽 DataFrame 很有用:计算每列摘要统计信息,包括空值的数量:以您要求的单位报告 DataFrame 的内存大小: Casting # 将列转换为另一种数据类型。默认情况下,强制转换是严格的,因此不适合的值会引发错误: df 。 select ( pl . col ( "id" ) .cast ( pl . UInt64 )) 传递 strict=False 进行强制转换而不引发。溢出目标类型的值将变为空值: df 。 select ( pl . col ( "id" ) .cast ( pl . Int8 , strict = False )) 读取和写入数据 # Polars 有四个系列的输入和输出函数,您想要哪一个取决于您是急于工作还是懒惰地工作: read_*() 将数据读取到 DataFrame 中。 scan_*() 创建一个 LazyFrame,将实际读取推迟到收集为止。 write_*() 将 DataFrame 写入磁盘或云存储。 sink_*() 将数据流式传输到磁盘或云存储,而不将其全部保存在内存中。并非每种格式都支持所有四种操作: 格式读取 sca
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱