
在 Polars 中,可通过 dt.strftime() 方法配合 strftime 格式化字符串(如 %b、%B、%a、%A)将 datetime 列转换为对应的英文月份或星期名称字符串。
在 polars 中,可通过 `dt.strftime()` 方法配合 strftime 格式化字符串(如 `%b`、`%b`、`%a`、`%a`)将 datetime 列转换为对应的英文月份或星期名称字符串。
Polars 的 dt 命名空间提供了丰富的日期时间操作能力,但与 Pandas 不同,它不直接提供 .dt.month_name() 或 .dt.day_name() 这类返回字符串名称的便捷方法。取而代之的是统一、灵活且高性能的 strftime() 接口——它基于 Rust 的 chrono 库,支持标准的 C-style 时间格式化指令。
✅ 正确用法:使用 dt.strftime()
以下是最常用且推荐的方式,适用于提取完整或缩写的月份与星期名称:
import polars as pl
from datetime import datetime
df = pl.DataFrame({
"date": [datetime(2024, 10, 1), datetime(2024, 11, 2)]
})
result = df.with_columns(
pl.col("date").dt.strftime("%B").alias("month_full"), # → "October", "November"
pl.col("date").dt.strftime("%b").alias("month_short"), # → "Oct", "Nov"
pl.col("date").dt.strftime("%A").alias("day_full"), # → "Tuesday", "Saturday"
pl.col("date").dt.strftime("%a").alias("day_short"), # → "Tue", "Sat"
)
print(result)输出:
shape: (2, 5) ┌─────────────────────┬──────────┬───────────────┬──────────┬─────────────┐ │ date ┆ month_full ┆ month_short ┆ day_full ┆ day_short │ │ --- ┆ --- ┆ --- ┆ --- ┆ --- │ │ datetime[μs] ┆ str ┆ str ┆ str ┆ str │ ╞═════════════════════╪════════════╪═════════════╪══════════╪═══════════╡ │ 2024-10-01 00:00:00 ┆ October ┆ Oct ┆ Tuesday ┆ Tue │ │ 2024-11-02 00:00:00 ┆ November ┆ Nov ┆ Saturday ┆ Sat │ └─────────────────────┴────────────┴─────────────┴──────────┴───────────┘
? 关键格式符速查表
| 格式符 | 含义 | 示例 |
|---|---|---|
%B |
完整月份名(英文) | "October" |
%b |
缩写月份名(3 字母) | "Oct" |
%A |
完整星期名(英文) | "Tuesday" |
%a |
缩写星期名(3 字母) | "Tue" |
%Y |
四位年份 | "2024" |
%d |
两位日期(补零) | "01" |
⚠️ 注意:
strftime()返回str类型列,不可用于后续数值计算;若需映射为自定义中文名或序号,建议先用strftime()转为英文标识,再通过map_dict或when().then().otherwise()显式转换。
? 小技巧:批量添加多级时间特征
你还可以一次性构建更丰富的特征列:
df = df.with_columns([
pl.col("date").dt.strftime("%Y-%m").alias("year_month"), # "2024-10"
pl.col("date").dt.strftime("%A").alias("weekday"),
pl.col("date").dt.weekday().alias("weekday_num"), # 数字:1=Monday … 7=Sunday
])总之,dt.strftime() 是 Polars 中获取可读性日期名称的标准、高效且跨平台一致的方法——掌握几个核心格式符,即可轻松满足绝大多数分析与展示场景需求。

















