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

Polars read_json指定自动推断类型的schema失败,求解决方法

解决Polars 0.19.9中read_json指定Schema并自动推断类型的问题

问题原因

你使用的Polars 0.19.9属于旧版本,该版本的read_json方法并不支持文档中描述的“依赖自动类型推断”的Schema写法(列名列表、值为None的字典、(列名, None)元组列表),这些特性是在后续版本(如0.20+)中才引入的。

可行实现方法

方法1:升级Polars到新版本

直接升级到支持该特性的版本,执行以下命令:

pip install --upgrade polars

升级后,你最初的三种写法都可以正常工作,比如:

import polars as pl
import io

js = io.StringIO('{"j":null,"k":1,"l":null}')
# 使用列名列表指定Schema,自动推断类型
print(pl.read_json(js, schema=['j', 'k', 'l']))

方法2:在旧版本中手动指定兼容类型

如果无法升级,可以通过明确指定列的DataType来保留需要的列,即使列值全为null。示例代码:

import polars as pl
import io

js = io.StringIO('{"j":null,"k":1,"l":null}')
# 为每列指定兼容的DataType,允许null值
df = pl.read_json(js, schema={
    "j": pl.Int64,
    "k": pl.Int64,
    "l": pl.Int64
})
print(df)

执行结果会保留所有指定列:

shape: (1, 3)
┌──────┬─────┬──────┐
│ j    ┆ k   ┆ l    │
│ ---  ┆ --- ┆ ---  │
│ i64  ┆ i64 ┆ i64  │
╞══════╪═════╪══════╡
│ null ┆ 1   ┆ null │
└──────┴─────┴──────┘

方法3:读取后手动补充缺失列

如果不确定列的具体类型,也可以先读取现有列,再手动添加缺失的列:

import polars as pl
import io

js = io.StringIO('{"j":null,"k":1,"l":null}')
df = pl.read_json(js)
# 添加缺失的j、l列,默认类型为Null
df = df.with_columns(
    pl.lit(None).alias("j"),
    pl.lit(None).alias("l")
).select(["j", "k", "l"])  # 调整列顺序
print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:39:54