使用json_normalize提取多层JSON元数据,需新增subGroup字段
如何在json_normalize生成的DataFrame中包含subGroup字段?
你现在的JSON数据是这样的:
ds = [{ "name": "groupa", "subGroups": [{ "subGroup": 1, "people": [{ "firstname":"Tony", }, { "firstname":"Brian" } ] }] }, { "name": "groupb", "subGroups": [{ "subGroup": 1, "people": [{ "firstname":"Tony", }, { "firstname":"Brian" } ] }] } ]
执行json_normalize时只指定了name作为元数据,所以结果里只有firstname和name列。要把subGroup也加进来其实很简单,只需要在meta参数里补充subGroup的嵌套路径就行。
解决方案代码
from pandas import json_normalize # 提取包含subGroup的DataFrame df = json_normalize( ds, record_path=['subGroups', 'people'], # 展开people列表 meta=['name', ['subGroups', 'subGroup']] # 同时提取name和subGroup ) # 可选:把自动生成的列名"subGroups.subGroup"改成更简洁的"subGroup" df = df.rename(columns={'subGroups.subGroup': 'subGroup'})
最终结果
执行后你会得到这样的DataFrame:
| firstname | name | subGroup |
|---|---|---|
| Tony | groupa | 1 |
| Brian | groupa | 1 |
| Tony | groupb | 1 |
| Brian | groupb | 1 |
原理说明
json_normalize的meta参数支持嵌套路径,因为subGroup和people是同级的,都在subGroups这个数组对象里,所以我们需要用['subGroups', 'subGroup']来明确指定这个字段的位置,这样工具就能从people的父层级中提取出对应的subGroup值,和展开后的people条目一一对应。
内容的提问来源于stack exchange,提问作者More Than Five
相关产品推荐
相关产品推荐

