ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Polars 如何安装后创建 DataFrame 并通过 select 与 filter 表达式完成第一个查询?

Polars 如何安装后创建 DataFrame 并通过 select 与 filter 表达式完成第一个查询? Polars 如何安装后创建 DataFrame 并通过 select 与 filter 表达式完成第一个查询【免费下载链接】polarsExtremely fast Query Engine for DataFrames, written in Rust项目地址: https://gitcode.com/GitHub_Trending/po/polars装好 Polars 后多数新手卡在第一步数据放进来之后怎么按列做计算、按条件筛行。本文以 用户指南 Quick Start 中的官方示例为主线走一遍「安装 → 创建 DataFrame → 用select计算新列 → 用filter筛行」这条最短路径。示例代码来自仓库内文档示例 getting-started.py可直接复制运行。安装与导入Python 环境下安装命令为pip install polars如果你的机器是较老的 CPU、没有 AVX2 支持安装文档installation.md给出的替代方式是pip install polars[rtcompat]安装完成后导入import polars as plRust 环境则通过 Cargo 安装需要开启lazy特性cargo add polars -F lazy # 或在 Cargo.toml 中 [dependencies] polars { version x, features [lazy, ...]}下面的示例代码全部是 Python文档中的表达式示例没有提供对应的 Rust 版本所以主路径以 Python 为准。创建第一个 DataFrame用pl.DataFrame传入一个「列名 → 值列表」的字典即可。下面使用文档中的示例数据人名、生日、体重、身高import polars as pl import datetime as dt df pl.DataFrame( { name: [Alice Archer, Ben Brown, Chloe Cooper, Daniel Donovan], birthdate: [ dt.date(1997, 1, 10), dt.date(1985, 2, 15), dt.date(1983, 3, 22), dt.date(1981, 4, 30), ], weight: [57.9, 72.5, 53.6, 83.1], # (kg) height: [1.56, 1.77, 1.65, 1.75], # (m) } ) print(df)print(df)会在终端打印这个 4 行 4 列的 DataFrame用来确认数据已经正确载入。理解表达式为什么需要 select 和 filter 这样的上下文Polars 的表达式是数据变换的惰性表示。比如文档中的这个例子pl.col(weight) / (pl.col(height) ** 2)它描述的是「weight 除以 height 的平方」这个抽象计算本身并不产生结果。只有在 Polars 的某个上下文里表达式才会真正执行并得到 Series。expressions-and-contexts 文档列出四个最常用的上下文select、with_columns、filter、group_by。本文只用前两个。用 select 完成查询选取列并计算 BMIselect上下文中你提供的每个表达式映射为结果 DataFrame 的一列result df.select( pl.col(name), pl.col(birthdate).dt.year().alias(birth_year), (pl.col(weight) / (pl.col(height) ** 2)).alias(bmi), ) print(result)pl.col(name)原样保留name列pl.col(birthdate).dt.year().alias(birth_year)从生日中取出年份并命名为birth_year(pl.col(weight) / (pl.col(height) ** 2)).alias(bmi)计算 BMI 并命名为bmi。alias用于给新列命名不加alias时列名由表达式自动决定。运行后print(result)应显示只有 3 列name、birth_year、bmi的结果表行数仍是 4——select只包含表达式指定的列而不是在原 DataFrame 上加列要保留原列再加新列用with_columns。用 filter 完成查询按条件筛行filter上下文根据一个或多个布尔表达式生成只包含匹配行的新 DataFrameresult df.filter(pl.col(birthdate).dt.year() 1990) print(result)对照示例数据核对四个人的出生年份分别是 1997、1985、1983、1981满足「小于 1990」的是后三人所以结果应只剩 3 行。条件较多时把多个谓词作为独立参数传给filter比用串联更清晰result df.filter( pl.col(birthdate).is_between(dt.date(1982, 12, 31), dt.date(1996, 1, 1)), pl.col(height) 1.7, ) print(result)这条示例要求生日落在 1982-12-31 与 1996-01-01 之间且身高大于 1.7 米。对照示例数据同时满足两个条件的只有 Ben Brown1985-02-151.77 m结果应为单行。验证方式文档给出的检查方式就是直接打印创建 DataFrame 后print(df)确认结构查询后print(result)检查列与行。判断查询是否正确的依据是示例数据本身——上面两节已说明每个谓词在该数据上应匹配哪些行运行结果与预期不符时优先检查列名拼写和日期条件是否写反。边界与下一步表达式本身不执行计算必须放进select/with_columns/filter等上下文才有结果同一个表达式在不同上下文中的行为也不同详见 Expressions and contexts。想保留原列再追加新列时用with_columns而不是select分组聚合用group_byQuick Start 文档中有完整示例。需要更多可选依赖如numpy、fsspec或 Rust 特性开关的说明见 Installation。【免费下载链接】polarsExtremely fast Query Engine for DataFrames, written in Rust项目地址: https://gitcode.com/GitHub_Trending/po/polars创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表