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

使用Polars从特殊格式Datetime提取日期失败的问题求助

错误原因与解决方法

错误原因

你使用str.strptime(pl.Date, '%Y-%m-%d')时,指定的格式串%Y-%m-%d仅能匹配纯日期字符串,但输入的是包含时分秒、毫秒的完整ISO时间字符串。Polars的strptime默认启用严格模式(strict=True),要求输入字符串与格式串完全匹配,时间部分的存在导致解析失败,因此抛出ComputeError。

解决方法

以下是三种可行的解决方案:

方案1:先转Datetime再提取日期

利用Polars对ISO标准时间格式的自动识别能力,先将字符串转为pl.Datetime类型,再提取日期部分:

import polars as pl
df = pl.DataFrame(['2023-08-01T06:13:24.448409',
'2023-08-01T07:29:34.491027'])

# 方式1:转Datetime后用dt.date()提取日期
result = df.with_columns(pl.col('column_0').str.strptime(pl.Datetime).dt.date())

# 方式2:转Datetime后直接转为Date类型
result = df.with_columns(pl.col('column_0').str.strptime(pl.Datetime).cast(pl.Date))

print(result)

方案2:匹配完整格式串后转Date

如果要坚持用strptime直接解析,需要写出包含时间部分的完整格式串,再转为Date类型:

import polars as pl
df = pl.DataFrame(['2023-08-01T06:13:24.448409',
'2023-08-01T07:29:34.491027'])

result = df.with_columns(pl.col('column_0').str.strptime(pl.Datetime, '%Y-%m-%dT%H:%M:%S.%f').cast(pl.Date))
print(result)

方案3:直接截取日期子串

由于日期部分固定为字符串前10位,可直接截取后转Date:

import polars as pl
df = pl.DataFrame(['2023-08-01T06:13:24.448409',
'2023-08-01T07:29:34.491027'])

result = df.with_columns(pl.col('column_0').str.slice(0, 10).str.strptime(pl.Date, '%Y-%m-%d'))
print(result)

内容的提问来源于stack exchange,提问作者INGl0R1AM0R1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:22:39