0
import pandas as pd
import requests
import json


def getAPIreturn(para):
    url = "http://localhost/search?name={}".format(para)
    try:
        return_json = json.loads(requests.get(url).text)
        response = return_json['data'] # get the first response string
        print (type(response))
    except:
        response = "" 
    return response

data = pd.read_csv("input.csv") 
data['return'] = data['para'].apply(getAPIreturn)

data.to_csv("output.csv",index=False)

上面的代码将读取一个 csv 文件并读取名为input调用 API 的第一列作为参数,然后将其data返回并保存到名为的第二列return并输出一个 CSV 文件。

如果我想从响应中选择多个值怎么办?例如,, ,score并将其保存回 CSV?countstatus

{
    "data": [
        {
            "score": 1234
        },
        {
            "count": 2
        },
        {
            "id": "1234",
            "Section": "abc",
            "DisplayName": "hihi",
            "status": "History"
        }
    ]
}

csv 文件中的首选结果:

输入 分数 数数 地位
得分1 1 历史
第 2 段 得分2 2 历史
4

1 回答 1

0

与其在给定列上使用 apply ,不如在整个数据框上使用 apply 并 pass axis=1。您的函数将每行调用一次。然后可以根据请求的结果根据需要更新该行,例如:

import pandas as pd
import requests
import json

def getAPIreturn(row):
    para = row['para']
    url = f"http://localhost/search?name={para}"
    
    try:
        return_json = json.loads(requests.get(url).text)
        data = return_json['data']
        
        score = data[0]['score']
        count = data[1]['count']
        status = data[2]['status']
    except:
        score = None
        count = None
        status = None
        
    row['score'] = score
    row['count'] = count
    row['status'] = status
        
    return row

data = pd.read_csv("input.csv") 
data = data.apply(getAPIreturn, axis=1)
data.to_csv("output.csv", index=False)

您也可以使用以下内容:

return_json = requests.get(url).json()
于 2021-02-24T10:19:11.667 回答