如何使用Python的Polars库为JSON输出添加新层级?
Polars保存DataFrame为带外层键的JSON格式
需要将Polars DataFrame保存为包含"Befs"外层键的JSON结构,而非默认的数组格式,以下是两种可行方案:
方法1:结合Python json模块(直观易理解)
先将DataFrame转为字典列表,构造目标层级结构后,用json模块写入文件或生成字符串:
import polars as pl import json df = pl.DataFrame({ "id": [1, 2, 3, 4, 5], "variable1": [15, 25, 5, 10, 20], "variable2": [40, 30, 50, 10, 20], }) # 可选:将id列重命名为ID(匹配期望输出的键名) formatted_df = df.rename({"id": "ID"}) # 转为字典列表 records = formatted_df.to_dicts() # 构造包含Befs键的外层结构 output = {"Befs": records} # 保存到文件(带缩进美化) with open("result.json", "w", encoding="utf-8") as f: json.dump(output, f, indent=4) # 或者直接生成JSON字符串 json_str = json.dumps(output, indent=4) print(json_str)
方法2:纯Polars操作(无需额外导入模块)
创建单行DataFrame,将原DataFrame转为struct数组作为"Befs"列的值,再调用write_json:
import polars as pl df = pl.DataFrame({ "id": [1, 2, 3, 4, 5], "variable1": [15, 25, 5, 10, 20], "variable2": [40, 30, 50, 10, 20], }) ( # 构造单行DataFrame,Befs列对应原DataFrame的struct数组 pl.DataFrame({"Befs": [df.rename({"id": "ID"}).to_struct()]}) # 写入JSON并开启缩进美化 .write_json("result.json", indent=4) )
你的尝试未成功的原因
之前用pl.struct()的写法,会把每一行数据包装成包含"Bef"字段的对象,最终生成的JSON是一个由{"Bef": "Bef", "id": ...}这类元素组成的数组,和你需要的「外层单个对象+Befs键对应数组」的结构完全不符。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

