如何针对指定路径展平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
相关产品推荐
相关产品推荐

