将嵌套的 JSON 获取为 pandas 数据框
Posted
技术标签:
【中文标题】将嵌套的 JSON 获取为 pandas 数据框【英文标题】:Get nested JSON to be pandas dataframe 【发布时间】: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,而无需知道名称(如果我有任何意义的话)。
【参考方案1】:
在你的例子中
df = df.set_index('symbol')
然后打电话
df.loc['TSLA']
或者你可以这样做
d = x : y for x ,y in df.groupby(df.index)
d[0]
d[1]
【讨论】:
以上是关于将嵌套的 JSON 获取为 pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章