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
相关产品推荐
相关产品推荐

