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

如何使用带schema参数的Polars pl.read_json函数将指定JSON文件转换为Polars DataFrame

如何使用带schema参数的Polars pl.read_json函数将指定JSON文件转换为Polars DataFrame

嘿,我来帮你搞定这个问题!你的JSON结构是嵌套式的——data字段下包含了列名列表names和数据行数组ndarray,直接用pl.read_json读取的话,没法自动识别成标准的表格结构,不过结合schema参数和一些小技巧就能精准转换啦。

首先先明确你的JSON结构,方便我们后续处理:

{
"data": {
"names": ["A", "B", "C", "D", "E"],
"ndarray": [
["abc", true, 0.374618, 1, 0.83252],
["hello", false, 0.1265374619, 0, 0.253]
]
}
}

步骤1:定义自定义Schema

根据你的数据类型,我们先提前定义好每一列的类型(对应names里的A到E):

import polars as pl

custom_schema = {
    "A": pl.String,    # 对应第一列字符串
    "B": pl.Boolean,   # 第二列布尔值
    "C": pl.Float64,   # 第三列浮点数
    "D": pl.Int64,     # 第四列整数
    "E": pl.Float64    # 第五列浮点数
}

步骤2:用pl.read_json结合Schema转换

这里有两种实用的方式,你可以选适合自己的:

方式一:先读取整个JSON,再提取数据并应用Schema

如果想先确认原始数据结构,这种方式更直观:

# 读取你的JSON文件(假设文件名为data.json)
raw_df = pl.read_json("data.json")

# 从raw数据中提取ndarray数组,转成DataFrame并指定schema
final_df = pl.DataFrame(
    data=raw_df["data"]["ndarray"].to_list(),
    schema=custom_schema
)

方式二:直接用json_path定位数据+Schema参数

这种方式更高效,一步到位——用JSONPath语法直接定位到data.ndarray,同时指定schema:

final_df = pl.read_json(
    "data.json",
    json_path="$.data.ndarray",  # 定位到数据行数组
    schema=custom_schema         # 应用自定义类型约束
)

验证结果

打印final_df就能得到你想要的表格啦:

shape: (2, 5)
┌───────┬───────┬──────────────┬─────┬──────────┐
│ A     ┆ B     ┆ C            ┆ D   ┆ E        │
│ ---   ┆ ---   ┆ ---          ┆ --- ┆ ---      │
│ str   ┆ bool  ┆ f64          ┆ i64 ┆ f64      │
╞═══════╪═══════╪══════════════╪═════╪══════════╡
│ abc   ┆ true  ┆ 0.374618     ┆ 1   ┆ 0.83252  │
│ hello ┆ false ┆ 0.1265374619 ┆ 0   ┆ 0.253    │
└───────┴───────┴──────────────┴─────┴──────────┘

进阶:动态生成Schema(如果列名是动态的)

如果你的names字段是动态变化的,不想硬编码列名,可以先读取names来生成schema:

# 先读取列名列表
column_names = pl.read_json("data.json")["data"]["names"].to_list()
# 对应每一列的类型(根据你的数据调整)
column_types = [pl.String, pl.Boolean, pl.Float64, pl.Int64, pl.Float64]
# 动态生成schema
dynamic_schema = dict(zip(column_names, column_types))

# 再读取数据
final_df = pl.read_json(
    "data.json",
    json_path="$.data.ndarray",
    schema=dynamic_schema
)

这样不管names怎么变,都能自动匹配列名和类型啦!

备注:内容来源于stack exchange,提问作者Carlitos Overflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:48:05