繁体   English   中英

如何使用 python 中的多个参数从 API 端点正确获取数据?

[英]How to correctly fetch data from API endpoint with multiple parameter in python?

我试图从具有多个参数的 API 端点获取数据,并从中构建大 pandas dataframe。 在我的尝试中,我传递了根 URL 并使用自定义值列表迭代思想 API 端点的多个参数。 我的目标是从特定的 API 端点获取数据,但将不同的值传递给它的多个值,最后生成一个 pandas dataframe。 目前,我的代码返回给我一个空的 dataframe。 我担心我的尝试可能会做错事。 谁能指出我的代码出了什么问题? 有没有人建议在 pandas 中这样做的可能方法? 有什么想法吗?

我目前的尝试

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)

但我上面的代码给我返回了一个空的 dataframe。 也许我使用嵌套循环来执行此操作,这可能会导致问题。 运行上面的代码也需要几分钟。

这样做的有效方法是什么? 我的尝试哪里错了? 如何从 API 端点正确获取数据? 任何人都可以提出一种可能的方法吗? 有任何想法吗?

两个问题:

  1. 熊猫的append返回一个新的object,它没有修改原来的dataframe
  2. 你 append 在外循环,不在内循环

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)

建议

一步构建您的 url,更具可读性

rooturl = 'https://apps.fas.usda.gov/OpenData/api/esr/exports/commodityCode/{}/countryCode/{}/marketyear/{}'
url = rooturl.format(cc1, cc2, year)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM