如何将Polars的datetime列转换为仅含日期的字符串列?
Polars:将Datetime列转换为仅保留日期的字符串列
要实现只保留日期部分的字符串转换,有两种高效的方法:
方法1:使用strftime自定义格式
直接通过strftime方法指定日期格式(如%Y-%m-%d),一步到位生成目标字符串:
import polars as pl df = pl.from_repr(""" ┌─────────────────────┐ │ date_time │ │ --- │ │ datetime[ns] │ ╞═════════════════════╡ │ 2007-04-19 00:00:00 │ │ 2007-05-02 00:00:00 │ │ 2007-05-03 00:00:00 │ │ 2007-05-03 00:00:00 │ └─────────────────────┘ """) # 转换并生成仅含日期的字符串列 result = df.with_columns(pl.col('date_time').strftime("%Y-%m-%d").alias('date_only')) print(result)
输出结果:
shape: (4, 2) ┌─────────────────────┬────────────┐ │ date_time ┆ date_only │ │ --- ┆ --- │ │ datetime[ns] ┆ str │ ╞═════════════════════╪════════════╡ │ 2007-04-19 00:00:00 ┆ 2007-04-19 │ │ 2007-05-02 00:00:00 ┆ 2007-05-02 │ │ 2007-05-03 00:00:00 ┆ 2007-05-03 │ │ 2007-05-03 00:00:00 ┆ 2007-05-03 │ └─────────────────────┴────────────┘
这种方法的优势是可以灵活自定义日期格式(比如%m/%d/%Y),满足不同输出需求。
方法2:先转Date类型再转字符串
先将Datetime列转换为Polars的Date类型(仅存储日期信息),再转为字符串:
result = df.with_columns(pl.col('date_time').cast(pl.Date).cast(pl.String).alias('date_only')) print(result)
输出结果和方法1一致,适合只需要ISO标准日期格式(YYYY-MM-DD)的场景,无需额外指定格式字符串。
注意:直接用
cast(pl.String)转换Datetime列会保留完整的时间戳(包括毫秒),这就是你之前得到不符合预期结果的原因。
内容的提问来源于stack exchange,提问作者Artur
相关产品推荐
相关产品推荐

