如何在python中将嵌套的JSON API响应转换为 Dataframe

hwamh0ep  于 2023-06-20  发布在  Python
关注(0)|答案(3)|浏览(151)

我有一个API,它返回一个列表的数据,如下所示:

{'NFO:AXISBANK23JUNFUT': {'instrument_token': 9156098, 'last_price': 967.55}, 'NFO:BAJAJ-AUTO23JUNFUT': {'instrument_token': 9156354, 'last_price': 4619.15}, 'NFO:BAJAJFINSV23JUNFUT': {'instrument_token': 9179138, 'last_price': 1544.1}, 'NFO:BAJFINANCE23JUNFUT': {'instrument_token': 9179394, 'last_price': 7390.85}, 'NFO:BALRAMCHIN23JUNFUT': {'instrument_token': 9180930, 'last_price': 395.95}}

当我尝试将其转换为dataframe时,主值会出现在标题中,如下所示:

NFO:AXISBANK23JUNFUT  ...  NFO:BALRAMCHIN23JUNFUT
instrument_token            9156098.00  ...              9180930.00
last_price                      967.55  ...                  395.95

但我需要以相反的方式提供此数据,如下所示:

instrument_token      last_price
NFO:AXISBANK23JUNFUT      9156098               967.55
NFO:BALRAMCHIN23JUNFUT    9180930               395.95
mtb9vblg

mtb9vblg1#

首先,您需要将键设置为索引,将其他嵌套数据设置为列。您可以使用以下代码段Ref: Pandas from_records

samples = {'NFO:AXISBANK23JUNFUT': {'instrument_token': 9156098, 'last_price': 967.55}, 'NFO:BAJAJ-AUTO23JUNFUT': {'instrument_token': 9156354, 'last_price': 4619.15}, 'NFO:BAJAJFINSV23JUNFUT': {'instrument_token': 9179138, 'last_price': 1544.1}, 'NFO:BAJFINANCE23JUNFUT': {'instrument_token': 9179394, 'last_price': 7390.85}, 'NFO:BALRAMCHIN23JUNFUT': {'instrument_token': 9180930, 'last_price': 395.95}}
# Set the dictionary keys as index column and the nesting values as records.
df = pd.DataFrame.from_records(list(samples.values()), index=list(samples.keys()))
h22fl7wq

h22fl7wq2#

首先,我转换成DF,然后使用DF转换方法来转换,这样我的数据就转换成了所需的格式。然后我可以使用脚本名称作为索引来查找数据。

inn6fuwd

inn6fuwd3#

你可以使用这个orient='index'参数来指定字典的键应该被用作DataFrame的索引。

import pandas as pd

api_response = {
'NFO:AXISBANK23JUNFUT': {'instrument_token': 9156098, 'last_price': 967.55},
'NFO:BAJAJ-AUTO23JUNFUT': {'instrument_token': 9156354, 'last_price': 4619.15},
'NFO:BAJAJFINSV23JUNFUT': {'instrument_token': 9179138, 'last_price': 1544.1},
'NFO:BAJFINANCE23JUNFUT': {'instrument_token': 9179394, 'last_price': 7390.85},
'NFO:BALRAMCHIN23JUNFUT': {'instrument_token': 9180930, 'last_price': 395.95}

}

df = pd.DataFrame.from_dict(api_response, orient='index')

相关问题