【发布时间】:2021-12-09 13:29:37
【问题描述】:
我有这个 JSON,
{
"status": "ok",
"stocks": [
{
"symbol": "TSLA",
"price": [
{
"date": "2021-10-19",
"close": 141.98
}
]
},
{
"symbol": "AMZN",
"price": [
{
"date": "2021-10-19",
"close": 3444.15
}
]
}
]
}
我需要根据 price 从第一个数组和第二个数组创建两个 pandas 数据框,而不使用股票名称来识别它。
预期:
第一个数组(基于 TSLA),df1
date close
2021-10-19 141.98
第二个数组(基于 AMZN),df2
date close
2021-10-19 3444.15
我曾探索过 pandas 的 json_normalize 函数,但它似乎只能展平 JSON 的第一级。我怎样才能展平第二层,只得到我预期的结果?
编辑:
设法让它发挥作用,完全不是我预期的结果。使用这个,
df = pd.json_normalize(data['stocks'], record_path='price', meta=['symbol'])
返回
date close symbol
2021-10-19 141.98 TSLA
2021-10-19 3444.15 AMZN
在执行json_normalize 时,有没有办法让两只股票分开,就像我的预期结果一样?
【问题讨论】:
-
为什么需要两个数据框?这似乎没有意义。您当然可以使用
df1 = df[df'symbol']=='TSLA'和df2 = df[df['symbol']=='AMZN']。 -
这行代码将在不知道 JSON 中的符号名称的情况下运行,因此我无法在您建议的内容中硬编码符号名称。这个想法是根据每个数组的第一个数组和第二个数组获取 df,而无需知道名称(如果我有任何意义的话)。