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

如何用df.to_json()输出含嵌套JSON列表的DataFrame为标准JSON

解决DataFrame类JSON嵌套列转标准JSON的问题

直接用df.to_json()无法实现需求,因为原DataFrame的items列是类JSON格式的字符串(键无引号、用=分隔键值),而非真正的嵌套列表/字典结构,to_json会将其当作普通字符串输出。要得到目标格式,需先将items列转换为合法的Python嵌套数据结构,再调用to_json。

具体步骤

  1. 预处理items列,转换为合法Python对象
    先通过正则表达式将类JSON字符串转换为符合Python字面量语法的格式(给键加引号、把=替换为:),再用ast.literal_eval解析成列表/字典。

  2. 调用to_json输出标准JSON
    转换后的数据结构是真正的嵌套类型,to_json会保留其层级结构输出标准JSON。

代码示例

import pandas as pd
import ast
import re

# 定义解析函数
def parse_item_string(item_str):
    # 给键添加引号,将=替换为:
    processed_str = re.sub(r'(\w+)=', r'"\1":', item_str)
    # 解析为Python嵌套对象
    return ast.literal_eval(processed_str)

# 示例DataFrame
df = pd.DataFrame({
    "id": ["3b68b7b2-f42c-418b-aa88-02450d66b616"],
    "items": ["[{quantity=3.0, item_id=210defdb-de69-4d03-bddd-7db626cd501b, description=Abc}, {quantity=1.0, item_id=ff457660-5f30-4432-a5af-564a9dee0029, description=xyz . 23}, {quantity=10.0, item_id=8dbd22f2-cc13-4776-b58c-4d6fe0f3463e, description=abc def}]"]
})

# 处理items列
df['items'] = df['items'].apply(parse_item_string)

# 输出标准嵌套JSON
print(df.to_json(orient='records', indent=4))

输出结果

[
    {
        "id": "3b68b7b2-f42c-418b-aa88-02450d66b616",
        "items": [
            {
                "quantity": 3.0,
                "item_id": "210defdb-de69-4d03-bddd-7db626cd501b",
                "description": "Abc"
            },
            {
                "quantity": 1.0,
                "item_id": "ff457660-5f30-4432-a5af-564a9dee0029",
                "description": "xyz . 23"
            },
            {
                "quantity": 10.0,
                "item_id": "8dbd22f2-cc13-4776-b58c-4d6fe0f3463e",
                "description": "abc def"
            }
        ]
    }
]

注意事项

如果items列的键包含特殊字符(如空格、连字符),需要调整正则表达式以匹配这类键,例如将(\w+)替换为([\w-]+)来匹配带连字符的键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:15:43