【发布时间】:2020-08-26 01:15:37
【问题描述】:
我正在努力规范从 coinmarketcap.com 导入的 json 文件。 Here's one of the json files,如果你想检查一下。
如果我了解如何正确使用pd.json_normalize,我需要专门指出要转换为列:值的索引:值(使用索引名称)。但在这种情况下,第二层是一个变量——资产/加密货币的名称——它会随着每个新的数据块而变化(例如,在“BTC”、“ETH”、“LTC”等之间,该层的名称会发生变化)。但是,以下级别(每个资产中的级别)具有相同的结构,因此我想在单个相关列中对它们进行规范化,而不是仅仅因为第二级别(资产名称)不同而创建不同的列。
"status": {
"timestamp": "2020-08-25T22:24:16.060Z",
"error_code": 0,
},
"data": {
"BTC": {
"symbol": "BTC",
"max_supply": 21000000,
"quote": {
"EUR": {
"price": 9623.527026340924,
"volume_24h": 21958302582.89148
}
}
},
"ETH": {
"symbol": "ETH",
"max_supply": null,
"quote": {
"EUR": {
"price": 324.44292007109146,
"volume_24h": 10492469772.346445,
}
}
}
因此,从上面的示例中,我想创建一个数据框,其中包含单列“符号”、单列“价格”(理想情况下是“欧元价格”)等 - 并且每个资产的相应值位于相同的相关列(然后我会有一个带有资产名称的列以便能够区分它们)。
ASSET - SYMBOL - EUR-PRICE
BTC - BTC - 999,99
ETH - ETH - 888,88
但是如果我尝试df = pd.json_normalize(json_data),我最终会得到一个只有一行的df,每个字段本身都会变成一整列。为了能够指定“路径”——即pandas.json_normalize(data, record_path)——我需要定义一个特定的二级名称,而不是能够使用动态变量(不同的资产名称)。
我们将不胜感激任何帮助。特别是,有没有办法根据它们在 json 数据中的级别位置来定义将哪些值添加到某个列? (希望问题不要太混乱)????
【问题讨论】: