我们想从IMF网站获取数据,并将其转储到csv文件中。为此,可以使用IMF发布的API获取数据。但是,检索到的json列表包含一个嵌套字典,该字典可能为空,或者根据数据不为null的年份具有不同数量的元素。 下面是一个片段,用于确定问题。我们正在通过jupyter笔记本使用python3.6.5
我们尝试过使用json\u normalize,但它只能将顶层转换为csv。JSON的第二个元素包含一个嵌套字典,这会导致不需要的输出。你知道吗
import requests
from pandas.io.json import json_normalize
#url = 'http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/IFS/A.AU..?startPeriod=2017&endPeriod=2019'
url = 'http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/IFS/A.AU.FDSBT_XDC+GG_GEG_G01_XDC+FFSE_XDC.?startPeriod=2017&endPeriod=2019'
# Navigate to series in API-returned JSON data
json_raw = (requests.get(f'{url}').json()['CompactData']['DataSet']['Series'])
json_normalize(json_raw)
json\u normalize在输出中的结果为(注意,包含嵌套字典数组的'Obs'导致了问题)
@FREQ @INDICATOR @REF_AREA @TIME_FORMAT @UNIT_MULT Obs Obs.@OBS_VALUE Obs.@TIME_PERIOD
0 A FFSE_XDC AU P1Y 6 NaN 15750.23064215 2017
1 A GG_GEG_G01_XDC AU P1Y 6 [{'@TIME_PERIOD': '2017', '@OBS_VALUE': '4168'}, {'@TIME_PERIOD': '2018', '@OBS_VALUE': '3443'}] NaN NaN
2 A FDSBT_XDC AU P1Y 6 NaN NaN NaN
我们需要一个结果如下,以便我们可以转储在结构化格式到csv
@FREQ @INDICATOR @REF_AREA @TIME_FORMAT @UNIT_MULT Obs.@OBS_VALUE_0 Obs.@TIME_PERIOD_0 Obs.@OBS_VALUE_1 Obs.@TIME_PERIOD_1
0 A FFSE_XDC AU P1Y 6 15750.23064215 2017 NaN NaN
1 A GG_GEG_G01_XDC AU P1Y 6 4168 2017 3443 2018
2 A FDSBT_XDC AU P1Y 6 NaN NaN NaN NaN
这也许会有帮助
相关问题 更多 >
编程相关推荐