【发布时间】:2021-12-22 21:50:14
【问题描述】:
我正在尝试将 json 数据库扁平化为 pandas 数据框,因为这是我第一次处理 json 格式,所以我无法做我想做的事。 数据库位于这里https://mtgjson.com/downloads/all-files/#allprices,根据模型,结构是这样的:
{
"0120a941-9cfb-50b5-b5e4-4e0c7bd32410": {
"mtgo": {
"cardhoarder": {
"currency": "USD",
"retail": {
"foil": {
..., // more rows
"2020-04-21": 0.02
},
"normal": {
..., // more rows
"2020-04-21": 0.02
}
}
},
},
"paper": {
"cardkingdom" : {
"buylist": {
"foil": {
..., // more rows
"2020-04-21": 0.6
},
"normal": {
..., // more rows
"2020-04-21": 0.01
}
},
"currency": "USD",
"retail": {
"foil": {
..., // more rows
"2020-04-21": 0.12
},
"normal": {
..., // more rows
"2020-04-21": 0.02
}
}
},
"cardmarket": {
"currency": "EUR",
"retail": {
"foil": {
..., // more rows
"2020-04-21": 0.12
},
"normal": {
..., // more rows
"2020-04-21": 0.02
}
}
},
"tcgplayer": {
"currency": "USD",
"retail": {
"foil": {
..., // more rows
"2020-04-21": 0.12
},
"normal": {
..., // more rows
"2020-04-21": 0.02
}
}
}
}
}
}
当我查看 json 文件时,我有这个:
{"meta": {"date": "2021-11-07", "version": "5.1.0+20211107"}, "data": {"00010d56-fe38-5e35-8aed-518019aa36a5": {"paper": {"cardkingdom": {"buylist": {"foil.....
当我做基本的pd.read_json('AllPrices.json') 我得到了这个
| meta | data | |
|---|---|---|
| date | 2021-11-07 | NaN |
| version | 5.1.0+20211107 | NaN |
| 00010d56-fe38-5e35-8aed-518019aa36a5 | NaN | {'paper': {'cardkingdom': {'buylist': {'foil':... |
| 0001e0d0-2dcd-5640-aadc-a84765cf5fc9 | NaN | {'paper': {'cardkingdom': {'buylist': {'normal... |
所以我做了一些研究,找到了json_normalize并写了这段代码:
with open('AllPrices.json','r') as f:
data = json.loads(f.read())
pd.json_normalize(data, errors='ignore')
这通过扁平化 json 数据库完成了这项工作,但我以一行和 3100 万列结束。我想要的只是这个数据库中的一个信息,即我想要的日期的普通纸卡的 uuid 和 cardmarket 价格:
| uuid | paper.cardmarket.retail.normal.2021-11-07 |
|---|---|
| 00010d56-fe38-5e35-8aed-518019aa36a5 | 0.5 |
| 0001e0d0-2dcd-5640-aadc-a84765cf5fc9 | 0.25 |
我使用了record_path = 参数和meta = 参数,但我所做的最好的不是我预期的表。
我试过record_path = ['data'],它只给我一列中的uuid。
感谢您的帮助
【问题讨论】: