Как повторно запрашивать API и добавлять каждый JSON ответ к pandas кадру данных? - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь собрать данные за несколько лет из API качества воздуха EPA. API возвращает файл JSON для каждого года, который я хотел бы преобразовать в фрейм данных, в конечном итоге добавляя каждый последующий год в один и тот же фрейм данных. Вот мой код:

pd.set_option('display.max_columns', 60)

i = 1999

for i in range(1999, 2020):

    parameters = {
        "email": "patrick.debiasse@gmail.com",
        "key": "khakihawk63",
        "param": "81104,44201,42602,42101,42401",
        "bdate": str(i) + "1201",
        "edate": str(i) + "1202",
        "state": "49",
        "county": "035",
        "site": "3006"
    }

    #requesting the JSON data
    json_data = requests.get("https://aqs.epa.gov/data/api/annualData/bySite email=test@aqs.api&key=test&param=44201&bdate=20170618&edate=20170618&state=37&county=183&site=0014", params=parameters).json()

    #converting to dataframe
    df = pd.DataFrame((json_data['Data']))

    #appending the converted data to a separate dataframe which will ultimately contain all the years' data
    df2 = df.append(df)

    i + 1

df2

Когда я запускаю вышеуказанный код, я вижу только данные за последний год (2019) в кадре данных "df2", и он, кажется, включается дважды (данные 2019 добавляются к 2019 данные). Я делаю новичка для l oop здесь ошибки? Не правильно добавить данные? Что-то еще я не рассматриваю? Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 23 февраля 2020

В настоящее время вы добавляете фрейм данных к себе в каждом l oop и присваиваете его переменной df2.

Вместо этого попробуйте это:

for i in range(1999, 2020):

    ...

    #converting to dataframe
    df = pd.DataFrame((json_data['Data']))

    #appending the converted data to a separate dataframe which will ultimately contain all the years' data
    if i == 1999:
        result = df
    else:
        result = result.append(df)

Я также не понимаю, почему у вас есть утверждение i + 1 в конце для l oop. Сам по себе for l oop заботится об увеличении счетчика, и вам не нужно этого делать. Если вы хотите пропустить один год, вместо этого вы можете использовать range(1999, 2020, 2). Кроме того, способ написания i не увеличивается, вам нужно написать i += 1.

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