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

如何将Pandas DataFrame转换为指定层级结构的嵌套JSON?

把Pandas DataFrame转成品牌-型号-年份的嵌套JSON

嘿,这个需求我做移动端后端接口的时候刚好实现过,6700行的DataFrame完全没问题,用Pandas的分组+自定义函数就能轻松搞定符合层级要求的嵌套JSON,我给你一步步拆解:

核心思路

我们要按「品牌→型号→年份→剩余数据」的层级嵌套,本质就是逐层分组,把每一层的分组结果转成字典,最后再整体转成JSON。

具体实现步骤

假设你的DataFrame列名包含品牌、型号、年份,剩下的40列是需要放在Level3的业务数据。

1. 导入依赖

import pandas as pd
import json

2. 定义层级转换函数

我们从最内层开始定义函数,逐步向外嵌套:

  • 最内层:把每个年份对应的剩余列转成字典(如果同一年份有多条数据,改成列表即可)
  • 中间层:把每个型号对应的所有年份数据转成字典
  • 最外层:把每个品牌对应的所有型号数据转成字典
def year_to_detail(group):
    # 移除分组用的列,把剩余数据转成字典
    # 如果同一年份有多条数据,把to_dict('records')[0]改成to_dict('records')即可得到列表
    return group.drop(['品牌', '型号', '年份'], axis=1).to_dict('records')[0]

def model_to_years(group):
    # 按年份分组,调用内层函数转换,转成字典
    return group.groupby('年份').apply(year_to_detail).to_dict()

def brand_to_models(group):
    # 按型号分组,调用中间层函数转换,转成字典
    return group.groupby('型号').apply(model_to_years).to_dict()

3. 生成嵌套结构并转JSON

假设你的DataFrame名为df,执行以下代码:

# 生成嵌套字典
nested_dict = df.groupby('品牌').apply(brand_to_models).to_dict()

# 转成JSON,ensure_ascii=False保留中文,indent=2让格式更美观(移动端解析不影响,只是方便调试)
json_result = json.dumps(nested_dict, ensure_ascii=False, indent=2)

示例效果

假设你的DataFrame有如下数据:

品牌型号年份存储容量系统版本
苹果iPhone142022128GiOS16
苹果iPhone142023256GiOS17
华为Mate502022256GHarmonyOS3

转换后的JSON会是:

{
  "苹果": {
    "iPhone14": {
      "2022": {
        "存储容量": "128G",
        "系统版本": "iOS16"
      },
      "2023": {
        "存储容量": "256G",
        "系统版本": "iOS17"
      }
    }
  },
  "华为": {
    "Mate50": {
      "2022": {
        "存储容量": "256G",
        "系统版本": "HarmonyOS3"
      }
    }
  }
}

注意事项

  • 空值处理:如果品牌/型号/年份列有空值,分组会出错,建议先执行df = df.dropna(subset=['品牌', '型号', '年份'])清理数据
  • 重复数据处理:如果同一个「品牌-型号-年份」组合有多条数据,把year_to_detail里的to_dict('records')[0]改成to_dict('records'),这样年份对应的就是一个数据列表
  • 性能优化:6700行的数据用这种方法完全没问题,如果数据量更大,可以考虑用iterrows循环构建字典,效率会更高一些

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:03:00