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

如何针对指定路径展平Pandas JSON DataFrame?

Pandas JSON展平:获取指定路径的类别DataFrame

嘿,我来帮你搞定这个JSON数据展平的需求!你的数据集是嵌套结构的分组数据,我们可以用pandas.json_normalize精准指定路径来展开,得到你想要的包含所有类别的DataFrame。

先看你的原始数据集

首先把你的数据明确列出来,方便后续参考:

ds = [{ 
    "name": "groupA", 
    "subGroups": [{ 
        "subGroup": 1, 
        "categories": [
            { "category1": { "value": 10 } }, 
            { "category2": {} }, 
            { "category3": {} } 
        ] 
    }] 
}, { 
    "name": "groupB", 
    "subGroups": [{ 
        "subGroup": 1, 
        "categories": [
            { "category1": { "value": 500 } }, 
            { "category2": {} }, 
            { "category3": {} } 
        ] 
    }] 
}]

完整的展平代码

这里是可以直接运行的代码,我会详细解释每个参数的作用:

import pandas as pd

# 展平JSON核心代码
df = pd.json_normalize(
    data=ds,
    record_path=["subGroups", "categories"],  # 指定要展开的最内层数组路径:从顶层到categories列表
    meta=['name', ['subGroups', 'subGroup']],  # 保留上层的分组字段:name(顶层分组)和subGroup(子分组)
    record_prefix='category_'  # 给展开的类别字段加前缀,避免列名冲突
)

# 可选:整理列名,把自动生成的嵌套列名简化
df = df.rename(columns={'subGroups.subGroup': 'subGroup'})

# 查看结果
print(df)

输出结果说明

运行后你会得到这样的DataFrame:

category_category1.value  category_category2  category_category3    name  subGroup
0                      10.0                 NaN                 NaN  groupA         1
1                       NaN                 NaN                 NaN  groupA         1
2                       NaN                 NaN                 NaN  groupA         1
3                     500.0                 NaN                 NaN  groupB         1
4                       NaN                 NaN                 NaN  groupB         1
5                       NaN                 NaN                 NaN  groupB         1
  • 每个categories里的对象会被展开成单独的一行,所以每个subGroup会生成3行(对应3个category)
  • 空的category(比如category2、category3)因为没有value字段,所以显示为NaN
  • 保留了顶层的name和子分组的subGroup字段,方便你关联数据

可选:合并同一子分组的类别数据

如果不想每个category占一行,而是想把同一subGroup下的所有类别合并到一行,可以用groupby处理:

df_merged = df.groupby(['name', 'subGroup']).first().reset_index()
print(df_merged)

输出结果:

name  subGroup  category_category1.value  category_category2  category_category3
0  groupA         1                      10.0                 NaN                 NaN
1  groupB         1                     500.0                 NaN                 NaN

参数解释小总结

  • record_path:必须是数组,指定要展开的嵌套数组的路径,这里我们要展开每个subGroups下的categories列表
  • meta:指定要从上层结构中保留的字段,嵌套字段用列表表示(比如['subGroups', 'subGroup'])
  • record_prefix:给展开的字段加前缀,避免和meta字段的列名冲突

内容的提问来源于stack exchange,提问作者More Than Five

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:48:13