[ PROMPT_NODE_27022 ]
core_concepts
[ SKILL_DOCUMENTATION ]
# Polars 核心概念
## 表达式 (Expressions)
表达式是 Polars API 的基础。它们是可组合的单元,描述了数据转换而不立即执行。
### 什么是表达式?
表达式描述了对数据的转换。它仅在特定上下文中物化(执行):
- `select()` - 选择并转换列
- `with_columns()` - 添加或修改列
- `filter()` - 过滤行
- `group_by().agg()` - 聚合数据
### 表达式语法
**基本列引用:**
python
pl.col("column_name")
**计算表达式:**
python
# 算术运算
pl.col("height") * 2
pl.col("price") + pl.col("tax")
# 使用别名
(pl.col("weight") / (pl.col("height") ** 2)).alias("bmi")
# 方法链
pl.col("name").str.to_uppercase().str.slice(0, 3)
### 表达式上下文
**Select 上下文:**
python
df.select(
"name", # 简单列名
pl.col("age"), # 表达式
(pl.col("age") * 12).alias("age_in_months") # 计算表达式
)
**With_columns 上下文:**
python
df.with_columns(
age_doubled=pl.col("age") * 2,
name_upper=pl.col("name").str.to_uppercase()
)
**Filter 上下文:**
python
df.filter(
pl.col("age") > 25,
pl.col("city").is_in(["NY", "LA", "SF"])
)
**Group_by 上下文:**
python
df.group_by("department").agg(
pl.col("salary").mean(),
pl.col("employee_id").count()
)
### 表达式扩展
同时对多个列应用操作:
**所有列:**
python
df.select(pl.all() * 2)
**模式匹配:**
python
# 所有以 "_value" 结尾的列
df.select(pl.col("^.*_value$") * 100)
# 所有数值列
df.select(pl.col(pl.NUMERIC_DTYPES) + 1)
**排除模式:**
python
df.select(pl.all().exclude("id", "name"))
### 表达式组合
表达式可以存储并重用:
python
# 定义可重用表达式
age_expression = pl.col("age") * 12
name_expression = pl.col("name").str.to_uppercase()
# 在多个上下文中使用
df.select(age_expression, name_expression)
df.with_columns(age_months=age_expression)
## 数据类型
Polars 拥有基于 Apache Arrow 的严格类型系统。
### 核心数据类型
**数值型:**
- `Int8`, `Int16`, `Int32`, `Int64` - 有符号整数
- `UInt8`, `UInt16`, `UInt32`, `UInt64` - 无符号整数
- `Float32`, `Float64` - 浮点数
**文本型:**
- `Utf8` / `String` - UTF-8 编码字符串
- `Categorical` - 分类字符串(低基数)
- `Enum` - F