[ PROMPT_NODE_27018 ]
polars
[ SKILL_DOCUMENTATION ]
# Polars
## 概述
Polars 是一个基于 Apache Arrow 构建的、用于 Python 和 Rust 的极速 DataFrame 库。利用 Polars 基于表达式的 API、惰性求值框架和高性能数据操作能力,实现高效的数据处理、pandas 迁移及数据流水线优化。
## 快速入门
### 安装与基本使用
安装 Polars:
python
uv pip install polars
基本 DataFrame 创建与操作:
python
import polars as pl
# 创建 DataFrame
df = pl.DataFrame({
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["NY", "LA", "SF"]
})
# 选择列
df.select("name", "age")
# 过滤行
df.filter(pl.col("age") > 25)
# 添加计算列
df.with_columns(
age_plus_10=pl.col("age") + 10
)
## 核心概念
### 表达式 (Expressions)
表达式是 Polars 操作的基本构建块。它们描述了对数据的转换,并且可以组合、重用和优化。
**关键原则:**
- 使用 `pl.col("column_name")` 引用列
- 链式调用方法以构建复杂的转换
- 表达式是惰性的,仅在特定上下文(select, with_columns, filter, group_by)中执行
**示例:**
python
# 基于表达式的计算
df.select(
pl.col("name"),
(pl.col("age") * 12).alias("age_in_months")
)
### 惰性求值 vs 即时求值
**即时 (DataFrame):** 操作立即执行
python
df = pl.read_csv("file.csv") # 立即读取
result = df.filter(pl.col("age") > 25) # 立即执行
**惰性 (LazyFrame):** 操作构建查询计划,在执行前进行优化
python
lf = pl.scan_csv("file.csv") # 暂不读取
result = lf.filter(pl.col("age") > 25).select("name", "age")
df = result.collect() # 现在执行优化后的查询
**何时使用惰性求值:**
- 处理大数据集
- 复杂的查询流水线
- 仅需部分列/行时
- 性能至关重要时
**惰性求值的优势:**
- 自动查询优化
- 谓词下推 (Predicate pushdown)
- 投影下推 (Projection pushdown)
- 并行执行
详细概念请参考 `references/core_concepts.md`。
## 常见操作
### 选择 (Select)
选择并操作列:
python
# 选择特定列
df.select("name", "age")
# 使用表达式选择
df.select(
pl.col("name"),
(pl.col("age") * 2).alias("double_age")
)
# 选择所有匹配模式的列
df.select(pl.col("^.*_id$"))
### 过滤 (Filter)
按条件过滤行:
python