使用唯一键展平/规范化深度嵌套的对象
Posted
技术标签:
【中文标题】使用唯一键展平/规范化深度嵌套的对象【英文标题】:Flattening/normalizing deeply nested objects with unique keys 【发布时间】:2021-08-20 19:03:22 【问题描述】:解析 JSON 并将深度嵌套的属性设置为列的理想方法是什么。
"liked_food":
"A":
"-cheesecake":"name": "cheesecake", "calories":500,"ingredients":"sugar, eggs, cheese, crackers","serving_size":7,
"-donut":"name": "donut", "calories":150,"ingredients":"sugar, eggs, yeast","serving_size":1.5,
"B":
"-cheesecake":"name": "cheesecake", "calories":500,"ingredients":"sugar, eggs, cheese, crackers","serving_size":7
目标: 获取上面的 JSON sn-p 格式,类似于下面的数据框:
name | calories | ingredients | serving_size | |
---|---|---|---|---|
A | cheesecake | 500 | sugar, eggs, cheese, crackers | 7 |
A | donut | 150 | sugar, eggs, yeast | 1.5 |
B | cheesecake | 500 | sugar, eggs, cheese, crackers | 7 |
只需将 JSON 文件转换为数据框即可产生:
使用 json_normalize 而不设置任何字段会产生:
我尝试在元字段中设置属性(即名称、卡路里、成分和服务大小),并且在未设置任何字段的情况下使用 json_normalize 时,数据框看起来与数据框相似。
希望我忽略了一些简单的事情。提前致谢!
【问题讨论】:
【参考方案1】:如果dct
是您问题中的字典,那么:
df = pd.DataFrame(
[
"index": idx, **v
for idx, d in dct["liked_food"].items()
for v in d.values()
],
).set_index("index")
print(df)
打印:
name calories ingredients serving_size
index
A cheesecake 500 sugar, eggs, cheese, crackers 7.0
A donut 150 sugar, eggs, yeast 1.5
B cheesecake 500 sugar, eggs, cheese, crackers 7.0
【讨论】:
以上是关于使用唯一键展平/规范化深度嵌套的对象的主要内容,如果未能解决你的问题,请参考以下文章