【问题标题】:How to query an API repeatedly and append each JSON response to a pandas dataframe?如何重复查询 API 并将每个 JSON 响应附加到 pandas 数据帧?
【发布时间】:2020-06-07 01:16:45
【问题描述】:

我正在尝试从 EPA 的空气质量 API 中汇总多年的数据。 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

当我运行上述代码时,我只在“df2”数据框中看到去年(2019 年)的数据,而且它似乎被包含了两次(2019 年数据附加到 2019 年数据)。我在这里犯了一些新手循环错误吗?没有正确附加数据?还有什么我不考虑的?任何帮助深表感谢。

【问题讨论】:

    标签: python json pandas api dataframe


    【解决方案1】:

    您目前在每个循环中将数据框附加到自身,并将其分配给 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)
    

    我也不明白为什么你在 for 循环的末尾有声明 i + 1。 for 循环本身负责增加计数器,您不需要这样做。如果您想跳过一年,可以改用range(1999, 2020, 2)。 另外,你写i的方式没有增加,你需要写i += 1

    【讨论】:

    • 谢谢托马斯。这很有帮助,但“结果”数据框只有 1999 年的数据......可能是什么原因造成的?
    • 我的错。应该是result = result.append (df)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2023-04-10
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多