Polars中datetime列格式化为%Y%m字符串的方法求助
解决Polars DataFrame datetime列转%Y%m格式字符串的问题
错误原因
你遇到的AttributeError: 'Expr' object has no attribute 'strftime',是因为Polars中需要通过表达式的.dt属性来访问datetime类型的处理方法,直接调用strftime无效。
正确实现方法
通过.dt.strftime()方法即可完成datetime列的格式化,以下是两种常用实现方式:
方式1:添加新的格式化列
from datetime import datetime import polars as pl data = { "ID" : [1,2,3], "dates" : [datetime(2024,1,2),datetime(2024,1,3),datetime(2024,1,4)], } df = pl.DataFrame(data) # 添加名为formatted_date的新列,格式为%Y%m df = df.with_columns( pl.col("dates").dt.strftime("%Y%m").alias("formatted_date") ) print(df)
执行后输出:
shape: (3, 3) ┌─────┬─────────────────────┬──────────────┐ │ ID ┆ dates ┆ formatted_date │ │ --- ┆ --- ┆ --- │ │ i64 ┆ datetime[μs] ┆ str │ ╞═════╪═════════════════════╪══════════════╡ │ 1 ┆ 2024-01-02 00:00:00 ┆ 202401 │ │ 2 ┆ 2024-01-03 00:00:00 ┆ 202401 │ │ 3 ┆ 2024-01-04 00:00:00 ┆ 202401 │ └─────┴─────────────────────┴──────────────┘
方式2:替换原datetime列
如果不需要保留原dates列,可直接替换:
# 方式一:覆盖原列 df = df.with_columns( pl.col("dates").dt.strftime("%Y%m").alias("dates") ) # 方式二:重新构造DataFrame df = df.select( "ID", pl.col("dates").dt.strftime("%Y%m").alias("dates") )
补充说明
.dt是Polars专门用于处理datetime/datetime64类型列的属性,提供提取年/月/日、时间格式化等各类时间操作。strftime的格式符和Python标准库datetime.strftime完全一致,可按需调整格式。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

