【问题标题】:passing value from panda dataframe to http request将值从 panda 数据帧传递到 http 请求
【发布时间】:2020-04-11 11:39:53
【问题描述】:

我不确定我应该如何问这个问题。我正在使用 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 以将其传递给我的请求 url。

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

我正在使用云函数运行我的脚本。

【问题讨论】:

  • 你根本没有循环任何东西。你的意思是for value in df['ID']: response = requests.get(...)?你从print(value) 看到了什么?
  • 我想我误解了我的控制台日志输出。我看到所有值 (df[['ID']]) 从我的 csv 文件中一个接一个地打印出来......就像我在循环浏览它一样。
  • .to_string(...) 使它成为项目的字符串表示形式,但它实际上只是 每个 ID一个 迭代。如果要一一处理,需要循环使用for
  • df[['ID']].to_string(index=False) 一次将整个列作为字符串提供给您。您需要对列进行索引或循环以获取各个数据元素
  • @Parfait 使用csv 模块会更简单吗?我很乐意举个例子。

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


【解决方案1】:

其实,放弃使用 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)

【讨论】:

    【解决方案2】:

    试试这个:

    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)
    

    正如我在评论中提到的,您还没有遍历数据。您所看到的只是带有换行符的字符串表示形式(这可能是您错误地认为是循环的原因)。

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2020-09-16
      • 1970-01-01
      相关资源
      最近更新 更多