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

Polars读取JSON时日期类型解析失败,如何正确读取Date类型?

问题

我希望从包含标准ISO格式("yyyy-mm-dd")日期的JSON字符串中读取Polars DataFrame。当尝试使用schema或schema_override参数指定日期列的类型为pl.Date时,结果仅返回NULL值。

最小可复现示例(MRE)

from datetime import datetime, timedelta
from io import StringIO

import polars as pl

# 生成日期列表
start_date = datetime.today()
dates = [start_date + timedelta(days=i) for i in range(100)]
date_strings = [date.strftime("%Y-%m-%d") for date in dates]

# 创建Polars DataFrame
df = pl.DataFrame({"dates": date_strings})

df_reread = pl.read_json(
    StringIO(df.write_json()),
    schema_overrides={"dates": pl.Date},
)

执行print(df_reread)后的输出:

shape: (100, 1)
┌───────┐
│ dates │
│ ---   │
│ date  │
╞═══════╡
│ null  │
│ null  │
│ null  │
│ null  │
│ null  │
│ …     │
│ null  │
│ null  │
│ null  │
│ null  │
│ null  │
└───────┘

问题:是否存在正确从JSON字符串中读取Date类型的方法?

解决方案

方法1:读取后转换列类型

先以字符串类型读取JSON,再通过str.to_date()方法将字符串列转换为pl.Date类型:

df_reread = pl.read_json(StringIO(df.write_json())).with_columns(
    pl.col("dates").str.to_date("%Y-%m-%d")
)

方法2:使用parse_dates参数直接解析

Polars的read_json方法提供了parse_dates参数,指定需要解析的列名后,会自动将ISO格式的日期字符串转换为pl.Date类型:

df_reread = pl.read_json(
    StringIO(df.write_json()),
    parse_dates=["dates"]
)

方法3:自定义schema配合类型转换

先通过schema指定列的原始类型为字符串,再转换为日期类型:

schema = {"dates": pl.Utf8}
df_reread = pl.read_json(StringIO(df.write_json()), schema=schema).with_columns(
    pl.col("dates").cast(pl.Date)
)

失败原因说明

JSON中存储的日期是字符串格式,Polars无法直接将字符串值映射到pl.Date类型,必须显式执行字符串到日期的解析逻辑,上述方法均通过显式解析或内置参数完成了这一步转换。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:55:03