首页 > 解决方案 > 如何将复杂的 json 转换为 pandas 数据框

问题描述

我正在通过他们的 api 提取 FRED 数据,并且我得到了复杂的 JSON。隐藏在这些数据中的是责任数据。JSON 内部是一个嵌套的“观察”键,该键内部是一个带有“日期”和“值”键的字典列表。我需要日期和值作为列标题。日期也可以是索引。

要获取数据,需要一个免费的 api 密钥,可以在这里找到: https ://fred.stlouisfed.org/ 。只需转到我的帐户并按照说明进行操作即可。

有关提取数据的代码,请参见下文。

import pandas as pd
import time
import urllib
import requests
from fred_api import fred_api #config file with my personal api
networth_endoint = r'https://api.stlouisfed.org/fred/series/observations?series_id=BOGZ1FL102090005A&api_key={}&file_type=json'.format(api)

content = requests.get(url = networth_endoint)

data = content.json()
data

如果您不想经历这些麻烦,下面是返回内容的片段:

{'realtime_start': '2020-03-03',
 'realtime_end': '2020-03-03',
 'observation_start': '1600-01-01',
 'observation_end': '9999-12-31',
 'units': 'lin',
 'output_type': 1,
 'file_type': 'json',
 'order_by': 'observation_date',
 'sort_order': 'asc',
 'count': 74,
 'offset': 0,
 'limit': 100000,
 'observations': [{'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1945-01-01',
   'value': '215967.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1946-01-01',
   'value': '232012.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1947-01-01',
   'value': '269729.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1948-01-01',
   'value': '294148.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1949-01-01',
   'value': '304352.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '1950-01-01',
   'value': '328550.0'}...

{'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '2017-01-01',
   'value': '15479906.0'},
  {'realtime_start': '2020-03-03',
   'realtime_end': '2020-03-03',
   'date': '2018-01-01',
   'value': '16491618.0'}]}

这是从 1945 年到最后一个报告的季度。实际的 json 被分解...

谁能弄清楚如何从 json 中提取每个日期和值并用它制作一个数据框?

标签: pythonjsonpandas

解决方案


推荐阅读