Ключевая ошибка при попытке получить несколько индикаторов из OECD API: - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь загрузить данные из 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 проблемы:

  1. 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 (self, name, value)

Файл "pandas_libs \ properties.pyx", строка 69, в pandas._libs.properties.AxisProperty. set

Файл "C: \ Users \ pedro.salgado \ PycharmProjects \ Chico_Municipios \ venv \ lib \ site-packages \ pandas \ core \ generic.py", строка 559, в _set_axis self._data.set_axis (ось, метки)

Файл "C: \ Users \ pedro.salgado \ PycharmProjects \ Chico_Municipios \ venv \ lib \ site-packages \ pandas \ core \ internals.py", строка 3074, в set_axis (old_len, new_len))

ValueError: Несоответствие длины: ожидаемая ось имеет 75 элементов, новые значения имеют 76 элементов

Очевидно, что индексация не работает, потому что строка данных имеет еще одно значение, чем df, но я не уверен, как проще всего это исправить. Когда я не индексирую df, код работает просто отлично. Есть идеи?

  1. После исправления проблемы №1, скрипт может загрузить мои данные. Однако, когда я пытаюсь получить несколько индикаторов одновременно, изменив код на:

    ('indicators', 'B1_GE.GPSA+VIXOBSA')

Вылетает, и я получаю еще одну ошибку:

Traceback (последний последний вызов):

Файл "C: /Users/pedro.salgado/PycharmProjects/Chico_Municipios/OECD.py", строка 29, в s_list = r ['dataSets'] [0] ['series'] [s_key] ['наблюдения']

KeyError: '51: 0: 0: 0 '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...