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

如何将JSON文件中的嵌套对象读取为Pandas DataFrame?

解决嵌套JSON转换为Pandas DataFrame格式异常的问题

原始JSON内容

{
    "success":true,
    "code":"SUCCESS",
    "data":{
        "from":1514745000000,
        "to":1522175400000,
        "transactionData":[
            {"name":"Recharge & bill payments","paymentInstruments":[{"type":"TOTAL","count":4200,"amount":1845307.4673655091}]},
            {"name":"Peer-to-peer payments","paymentInstruments":[{"type":"TOTAL","count":1871,"amount":1.2138655299749982E7}]},
            {"name":"Merchant payments","paymentInstruments":[{"type":"TOTAL","count":298,"amount":452507.168646613}]},
            {"name":"Financial Services","paymentInstruments":[{"type":"TOTAL","count":33,"amount":10601.419933464953}]},
            {"name":"Others","paymentInstruments":[{"type":"TOTAL","count":256,"amount":184689.8662902223}]}
        ]
    },
    "responseTimestamp":1630501487199
}

问题原因

直接使用pd.read_json('/1.json')读取会得到包含嵌套结构的DataFrame,因为JSON中的transactionData和paymentInstruments都是嵌套数组,无法被自动展开为规整的表格格式。

解决方案

使用pd.json_normalize()处理嵌套JSON,指定需要展开的嵌套路径和保留的上层字段,得到符合预期的表格结构。

基础版代码(仅提取交易核心数据)

import pandas as pd
import json

# 读取并解析JSON文件
with open('/1.json', 'r') as f:
    json_data = json.load(f)

# 提取核心交易数据列表
transaction_list = json_data['data']['transactionData']

# 展开嵌套结构生成DataFrame
df = pd.json_normalize(
    transaction_list,
    record_path='paymentInstruments',  # 指定要展开的嵌套数组字段
    meta=['name']  # 保留上层的交易类型名称字段
)

# 调整列顺序(可选)
df = df[['name', 'type', 'count', 'amount']]

执行后得到的规整DataFrame结构示例:

nametypecountamount
Recharge & bill paymentsTOTAL42001845307.4673655091
Peer-to-peer paymentsTOTAL187112138655.29975
Merchant paymentsTOTAL298452507.168646613
Financial ServicesTOTAL3310601.419933464953
OthersTOTAL256184689.8662902223

进阶版代码(包含时间戳字段)

如果需要保留JSON中from和to的时间戳信息,可以将其加入meta参数:

df = pd.json_normalize(
    transaction_list,
    record_path='paymentInstruments',
    meta=['name', ['data', 'from'], ['data', 'to']]
)

# 重命名时间戳列以提高可读性
df.rename(columns={
    'data.from': 'from_timestamp',
    'data.to': 'to_timestamp'
}, inplace=True)

# 转换时间戳为可读日期格式(可选)
df['from_timestamp'] = pd.to_datetime(df['from_timestamp'], unit='ms')
df['to_timestamp'] = pd.to_datetime(df['to_timestamp'], unit='ms')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:31