Polars 数据分析
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/cn-polars。
技能介绍
要解决什么问题
在 Python 里做表格型数据分析时,pandas 往往成为瓶颈:单线程执行、索引语义复杂、类型推断静默转换,复杂管道还难以在真正跑起来之前做整体优化。若你正在维护 ETL、探索性分析或从 pandas 迁到更高吞吐的实现,需要一套基于列表达式、能惰性规划查询且默认并行的 DataFrame 模型——这正是 Polars 的定位:基于 Apache Arrow 的 Python/Rust 库。
技能如何组织内容
本技能把 Polars 当成「可查阅的操作手册 + 迁移对照」,而不是替你在本地装包跑 benchmark。核心脉络包括:
- 表达式(Expression):用
pl.col("column_name")引用列,在select、with_columns、filter、group_by等上下文中链式组合;表达式在对应算子执行前保持惰性。 - 急切 vs 惰性:
DataFrame立即求值;LazyFrame先建查询计划,再受益于谓词下推、投影下推与并行执行——适合大数据、多步管道和只取部分列行的场景。 - 常用算子:列选择、条件过滤、保留原列的派生列、分组聚合,以及用
over()做窗口类计算(含group_to_rows/explode/join等映射策略)。 - I/O 与变换:CSV、Parquet(性能友好)、JSON、Excel、数据库与云存储等;Join、纵向/横向拼接、透视与逆透视。
- pandas 对照:无索引、严格类型、默认并行;技能内提供常见操作映射表(如
filter(pl.col(...))对应布尔索引)。 - 性能习惯:大表优先 Lazy、热路径少写 Python UDF(慎用
map_elements())、尽早投影列、选对Categorical/ 整数宽度 /Date等类型;必要时可提流式处理思路。
需要某一主题的细节时,技能会指向 references/ 下的分册(如 core_concepts.md、operations.md、pandas_migration.md 等),按需加载而非一次塞满。
适用边界
- 技能描述的是 Polars API 与模式,不包含你业务域的数据质量规则或合规要求;复杂自定义逻辑仍可能不得不落回 Python 层,并牺牲部分并行收益。
- 与 pandas 的「索引 + 就地修改」习惯不同:Polars 更强调不可变链式与显式类型;迁移时要接受语义差异,而不是逐行找等价 hack。
- 数据库、BigQuery、多文件分区等 I/O 能力在文档层面覆盖,实际连通性取决于你环境中的连接器与权限配置。
使用场景
- 维护多步 CSV 或 Parquet 入库管道,希望用 LazyFrame 在真正扫描全表前做 filter 与列投影优化
- 从 pandas 迁移动辄数 GB 的分组聚合报表,需要按 select、filter、with_columns、group_by 重写并保持语义一致
- 从本地目录或对象存储读取多文件 Parquet,完成 join、拼接后再导出为 Parquet 或 JSON
- 要在行级明细不变的前提下做分组内排名或滚动统计,用 over() 替代 pandas 的 groupby.transform
适合人员
- 维护脚本化 ETL、以 Parquet 为主存储的数据平台工程师,典型诉求是缩短大表过滤与聚合耗时
- 做量化或风控特征时单表经常顶满 pandas 内存或跑过慢的特征工程同学,需要表达式 API 与惰性求值
- 正在整理 pandas 到 Polars 对照表的后端或分析同学,关心无索引、严格类型与窗口 over() 的写法差异
- 负责探索性分析的数据分析师,需要稳定读写 CSV/Excel/JSON 并在组内做 sum、mean 等聚合