将值从熊猫数据框传递到http请求

时间:2019-12-18 21:22:07

标签: python python-3.x pandas google-cloud-functions

我不确定该怎么问。我正在使用panda遍历一个csv文件(至少我是这样认为的)。在遍历行时,我想传递特定列中的值以为每行运行一个http请求。

到目前为止,这是我的代码:

def api_request(request): 
    fs = gcsfs.GCSFileSystem(project=PROJECT)
    with fs.open('gs://project.appspot.com/file.csv') as f:
        df = pd.read_csv(f,)
        value = df[['ID']].to_string(index=False)
        print(value)
        response = requests.get(REQUEST_URL + value,headers={'accept': 'application/json','ClientToken':TOKEN }
        )
        json_response = response.json()
        print(json_response)

如您所见,我正在遍历csv文件以获取ID并将其传递给我的请求网址。

我不确定我是否理解问题,但是查看控制台日志时,似乎print(value)不在响应请求中,而在循环中。换句话说,在控制台日志中,我看到了所有已打印的ID,但仅看到一个http请求为空(可能是因为ID未正确传递给它)。

我正在使用云功能运行脚本。

2 个答案:

答案 0 :(得分:2)

实际上,放弃使用Pandas库,而只是通过csv进行迭代

import csv

def api_request(request): 
    fs = gcsfs.GCSFileSystem(project=PROJECT)
    with fs.open('gs://project.appspot.com/file.csv') as f:
        reader = csv.reader(f)
        next(reader, None)                 # SKIP HEADERS

        for row in reader:                 # LOOP THROUGH GENERATOR (NOT PANDAS SERIES)
            value = row[0]                 # SELECT FIRST COLUMN (ASSUMED ID)
            response = requests.get(
                 REQUEST_URL + value,
                 headers={'accept': 'application/json', 'ClientToken': TOKEN }
            )     
            json_response = response.json()
            print(json_response)

答案 1 :(得分:1)

试试看:

def api_request(request): 
    fs = gcsfs.GCSFileSystem(project=PROJECT)
    with fs.open('gs://project.appspot.com/file.csv') as f:
        df = pd.read_csv(f)
        for value in df['ID']:
            response = requests.get(
                REQUEST_URL + value,
                headers = {'accept': 'application/json', 'ClientToken': TOKEN }
            )
            json_response = response.json()
            print(json_response)

如我的评论所述,您尚未遍历数据。您看到的只是带有换行符的字符串表示形式(这可能是您误认为循环的原因)。