Skip to main content
 首页 » 编程设计

python之pandas之如何将嵌套字典中的数据加载到数据框中

2025年05月04日23thcjp

我正在尝试创建一个包含股票收盘价的数据框,并找到了一个免费的 api,它以嵌套字典的形式返回 JSON 数据,如下所示:

{'name': 'AAPL', 
 'history':  
           {'2019-01-04':  
                  {'open': '144.53', 
                   'close': '148.26', 
                   'high': '148.55', 
                   'low': '143.80', 
                   'volume': '58607070'}, 
           '2019-01-03':  
                   {'open': '143.98', 
                    'close': '142.19', 
                    'high': '145.72', 
                    'low': '142.00', 
                    'volume': '91312195'}, 
          '2019-01-02':  
                  {'open': '154.89', 
                   'close': '157.92', 
                   'high': '158.85', 
                   'low': '154.23', 
                   'volume': '37039737' 
}}} 

由于我想要的键“关闭”嵌套在“历史”和每个特定日期中,所以我很难提取它并将其放入数据框中。

这种情况背后的方法/逻辑是什么?我曾尝试生成带有日期时间的日期列表,但没有成功。您有什么建议或读物吗?

编辑:当前代码,显然不起作用

def make_request(): 
    '''Makes a request to the API that returns a JSON-response ''' 
    r = requests.get(url) 
    sample = json.loads(r.text) 
    return sample 
 
 
def check_keys(data): 
    '''Checks the keys in the JSON-response''' 
    print(data.keys()) 
 
 
def check_values(data): 
    '''Checks the values in the JSON-respose''' 
    print(data.values()) 
 
 
def get_values(data): 
    '''Gets the date for each day in the sample and stores it in a list''' 
     for v in data.get('history'): 
        values = v 
        return v 
 
 
def get_closeprice(data, values): 
    '''Uses the dates from get_values() to iterate through the sample and get the 
    closing price for each date in the sample''' 
    for date in values: 
        data.get('history').get(values).get('close') 
        return value 

请您参考如下方法:

如果您只想将其加载到数据框中:

# h = your dictionary 
 
df = pd.DataFrame.from_dict(data=h['history'],orient='index') 
 
cols = ['close'] 
 
df = df[cols] 
 
# Just as an aside Quandl has been very good for free financial data to me.  
#It has a paid side with premium data but I havent used it.