Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重复查询API并将每个JSON响应附加到数据帧?_Python_Json_Pandas_Api_Dataframe - Fatal编程技术网

Python 如何重复查询API并将每个JSON响应附加到数据帧?

Python 如何重复查询API并将每个JSON响应附加到数据帧?,python,json,pandas,api,dataframe,Python,Json,Pandas,Api,Dataframe,我正试图从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": "khakih

我正试图从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年数据)。我是不是犯了一些新手的循环错误?没有正确附加数据?还有什么我没有考虑的?非常感谢您的帮助

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