我正在尝试使用以下代码将数据从OECD API下载到python中:
import requests
import pandas as pd
base = 'http://stats.oecd.org/sdmx-json/data/'
param = [('dataset', 'QNA'),
('country', ''),
('indicators', 'B1_GE.GYSA'),
('freq', 'Q'),
('start_period=2016-Q4','?startTime=2016-Q4')
]
series = '.'.join(x[1] for x in param[1:-1])
url = '{}{}/{}{}'.format(base, param[0][1], series, param[-1][1])
r = requests.get(url).json()
date_list = r['structure']['dimensions']['observation'][0]['values']
dates = pd.to_datetime([x['id'] for x in date_list])
areas = [v['name'] for v in r['structure']['dimensions']['series'][0]['values']]
title = r['structure']['dimensions']['series'][1]['values'][0]['name']
df = pd.DataFrame()
for i, area in enumerate(areas):
s_key = '{}:0:0:0'.format(i)
s_list = r['dataSets'][0]['series'][s_key]['observations']
df[area] = pd.Series([s_list[val][0] for val in sorted(s_list, key=int)])
df[area] = (((df[area] / df[area].shift()) ** 4) - 1) * 100
df.index = dates
df = df.dropna()
df.to_csv("C:\\Users\\pedro.salgado\\Documents\\Data\\OECD.csv", sep=";")
我目前有2个问题:
df.index = dates
不起作用,出现以下错误:文件 “ C:/Users/pedro.salgado/PycharmProjects/Chico_Municipios/OECD.py”, 第34行,在 df.index =日期
文件“ C:\ Users \ pedro.salgado \ PycharmProjects \ Chico_Municipios \ venv \ lib \ site-packages \ pandas \ core \ generic.py”, 第3627行,位于 setattr 返回对象。 setattr (自身,名称,值)
pandas._libs.properties.AxisProperty中的文件“ pandas_libs \ properties.pyx”,第69行。设置
文件“ C:\ Users \ pedro.salgado \ PycharmProjects \ Chico_Municipios \ venv \ lib \ site-packages \ pandas \ core \ generic.py”, _set_axis中的559行 self._data.set_axis(轴,标签)
文件“ C:\ Users \ pedro.salgado \ PycharmProjects \ Chico_Municipios \ venv \ lib \ site-packages \ pandas \ core \ internals.py”, set_axis中的第3074行 (old_len,new_len))
ValueError:长度不匹配:预期轴有75个元素,新值有76个元素
显然,索引无法正常工作,因为数据行的值比df
多得多,但是我不确定最简单的解决方法是什么。当我不索引df
时,代码可以正常工作。有什么想法吗?
解决了第1个问题之后,脚本可以下载我的数据。但是,当我尝试通过将代码更改为
来同时获得多个标记时 ('indicators', 'B1_GE.GPSA+VIXOBSA')
它崩溃了,又出现了另一个错误:
回溯(最近通话最近一次):
文件“ C:/Users/pedro.salgado/PycharmProjects/Chico_Municipios/OECD.py”, 第29行,在 s_list = r ['dataSets'] [0] ['series'] [s_key] ['observations']
KeyError:'51:0:0:0'