我试图从具有多个参数的API端点获取数据,并从中构建大熊猫数据框。在尝试中,我传递了根URL,并使用自定义的值列表迭代了API端点的多个参数。我的目标是从特定的API端点获取数据,但将不同的值传递给其多个值,最后生成一个熊猫数据框。目前,我的代码向我返回了一个空的数据框。恐怕我尝试做错了什么。谁能指出我的代码出了什么问题?有没有人建议在熊猫中这样做的可能方法?有什么想法吗?
我目前的尝试
import pandas as pd
import json, requests
commodityCodes = [101, 102, 103, 104, 105]
countyCodes = [1220, 2010, 2050, 2110, 3330, 3370, 5210, 5460, 5490, 5520]
marketyear= list(range(2010,2020))
api_key = 'ec95a478-e46e-47f9-b57d-3d19012d527d'
rooturl = 'https://apps.fas.usda.gov/OpenData/api/esr/exports/'
headers = {'API_KEY': '{key}'.format(key=api_key)}
finaldf=pd.DataFrame()
for cc1 in commodityCodes:
for cc2 in countyCodes:
for year in marketyear:
jsonData = requests.get(rooturl+'commodityCode/{}'.format(cc1)+ '/countryCode/{}'.format(cc2)+'/marketyear/{}'.format(year), headers=headers).json()
df= pd.read_json(json.dumps(jsonData))
finaldf.append(df)
但是我上面的代码向我返回了一个空的数据框。也许我使用了嵌套循环来执行此操作,这可能会导致问题。同时运行上面的代码需要几分钟。
什么是有效的方法?我的尝试哪里出错了?如何正确从API端点获取数据?有人可以建议这样做的可能方法吗?有任何想法吗?
两个问题:
finaldf = pd.DataFrame()
for cc1 in commodityCodes:
for cc2 in countyCodes:
for year in marketyear:
jsonData = requests.get(rooturl+'commodityCode/{}'.format(cc1)+ '/countryCode/{}'.format(cc2)+'/marketyear/{}'.format(year), headers=headers).json()
df = pd.read_json(json.dumps(jsonData))
finaldf = finaldf.append(df)
建议
一步构建网址,更易读
rooturl = 'https://apps.fas.usda.gov/OpenData/api/esr/exports/commodityCode/{}/countryCode/{}/marketyear/{}'
url = rooturl.format(cc1, cc2, year)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句