You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars:自定义纳秒精度的日期时间格式化问题

解决方案:Polars将日期时间转换为带1位纳秒精度的格式

问题分析

你的代码存在两个核心问题:

  • 使用%y格式符(两位年份)导致年份显示异常,正确的四位年份格式符应为%Y
  • 使用%3f生成了三位微秒后缀(.000),不符合你需要的1位纳秒精度(.0)需求

方案1:转换为带1位纳秒格式的字符串列

如果需要将结果存储为字符串类型并显示.0后缀,直接在strftime中指定完整格式:

import polars as pl

# 读取平面文件
df = pl.read_csv("your_file_path.csv")

# 转换日期时间列
df = df.with_columns(
    pl.coalesce(
        # 先转成Datetime类型,再格式化为带.0的字符串
        pl.col("DATETIME_COL")
          .str.strptime(pl.Datetime, format="%Y-%m-%d %H:%M:%S")
          .dt.strftime("%Y-%m-%d %H:%M:%S.0"),
        # 处理空值的默认值
        pl.lit("2000-11-11 00:00:00.0")
    ).alias("DATETIME_COL")
)

执行后输出示例:

┌───────────────────────┐
│ DATETIME_COL          │
│ ---                   │
│ str                   │
╞═══════════════════════╡
│ 1974-08-08 16:28:51.0 │
│ 1997-12-12 17:56:19.0 │
│ 1986-05-24 09:04:12.0 │
│ 2008-01-13 05:31:57.0 │
│ …                     │
└───────────────────────┘

方案2:保持纳秒精度的Datetime类型

如果需要列类型仍为Datetime而非字符串,转换时指定time_unit="ns"(纳秒时间单位),Polars会自动显示纳秒精度的后缀:

import polars as pl

df = pl.read_csv("your_file_path.csv")

df = df.with_columns(
    pl.coalesce(
        # 转成纳秒精度的Datetime类型
        pl.col("DATETIME_COL")
          .str.strptime(pl.Datetime, format="%Y-%m-%d %H:%M:%S", time_unit="ns"),
        # 默认值同样转为纳秒精度Datetime
        pl.lit("2000-11-11 00:00:00").str.strptime(pl.Datetime, time_unit="ns")
    ).alias("DATETIME_COL")
)

此时列类型为datetime[ns],查看DataFrame时会显示类似1974-08-08 16:28:51.0的格式。


内容的提问来源于stack exchange,提问作者Smruti Prakash Mohanty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:53:24