[英]Flattening/normalizing deeply nested objects with unique keys
解析 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 片段,其格式類似於以下 dataframe:
姓名 | 卡路里 | 配料 | 服務大小 | |
---|---|---|---|---|
一個 | 乳酪蛋糕 | 500 | 糖、雞蛋、奶酪、餅干 | 7 |
一個 | 甜甜圈 | 150 | 糖、雞蛋、酵母 | 1.5 |
乙 | 乳酪蛋糕 | 500 | 糖、雞蛋、奶酪、餅干 | 7 |
只需將 JSON 文件轉換為 dataframe 即可得到:
使用 json_normalize 而不設置任何字段會產生:
我嘗試在元字段中設置屬性(即名稱、卡路里、成分和服務大小),並且在未設置任何字段的情況下使用 json_normalize 時,dataframe 看起來類似於 dataframe。
希望我忽略了一些簡單的事情。 提前致謝!
如果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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.