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

pandas如何提取深度嵌套JSON中指定路径的intervals到DataFrame

嵌套重名键JSON转DataFrame实现方案

核心解决思路

pd.json_normalize原生支持多层级路径定位,不需要手动拆分列绕路,直接通过路径列表精准定位meter_intervals下的目标intervals数组,完全避开根层级同名键的匹配问题。

可直接运行的代码

import pandas as pd
import json

# 替换为你的实际数据加载逻辑
# data = json.load(open("your_file.json", "r"))

# 以下为适配你提供结构的示例数据
data = {
    "system_id": 3212644,
    "total_devices": 1,
    "intervals": [
        {"end_at": 1656504900, "devices_reporting": 1, "wh_del": 0},
        {"end_at": 1656505800, "devices_reporting": 1, "wh_del": 0}
    ],
    "meta": {"status": "normal", "last_report_at": 1656588634, "last_energy_at": 1656588600, "operational_at": 1655953200},
    "meter_intervals": [
        {
            "meter_serial_number": "122147019814EIM1",
            "envoy_serial_number": "122147019814",
            "intervals": [
                {"channel": 1, "wh_del": 0.0, "curr_w": -2, "end_at": 1656504900},
                {"channel": 1, "wh_del": 0.0, "curr_w": -3, "end_at": 1656505800}
            ]
        }
    ]
}

# 核心转换逻辑
df = pd.json_normalize(
    data,
    # 按层级传入路径列表,精准定位目标数组,不会匹配根层级的intervals
    record_path=["meter_intervals", "intervals"],
    # 可选:需要关联上层电表信息、根层级系统信息时配置meta即可
    meta=[
        ["meter_intervals", "meter_serial_number"],
        ["meter_intervals", "envoy_serial_number"],
        "system_id",
        "total_devices"
    ],
    # 可选:给元数据列加前缀,避免和记录内字段重名
    meta_prefix="info_"
)

运行后输出的DataFrame会直接展开所有间隔字段:channel/wh_del/curr_w/end_at,同时携带关联的电表序列号、系统ID等信息,无嵌套残留。

如果不需要关联上层元数据,核心代码可以简化为一行:

df = pd.json_normalize(data, record_path=["meter_intervals", "intervals"])

原有方案问题说明

  • 传入record_path='intervals'时,pandas默认从根层级开始匹配第一个同名键,自然只能拿到根层级的汇总间隔数据,无法定位深层字段。
  • 不传record_path直接调用pd.json_normalize(data)时,只会扁平化根层级的非数组字段,数组类型的meter_intervals会整体作为单列存储,不会自动递归展开多层数组。
  • 手动提取df['meter_intervals']做二次处理属于冗余操作,通过原生参数指定路径是pandas官方支持的标准写法,代码更简洁,执行效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:06:22