如何使用Pandas数据框的请求创建多个Get http请求?
问题描述:
我是一个业余爱好程序员,想解决我遇到的现实世界问题。我是一个软件系统的用户,公开了一个允许用Get更新/添加记录的api。我将导入的数据修改为Pandas,但不知道迭代各行并动态创建URL的最佳方式。如何使用Pandas数据框的请求创建多个Get http请求?
我想创建于各行的URL类似于:
下面我已经列入我的代码设置的开头:
import pandas as pd
import requests as r
site = 'http://fakesite.org/servlet/Erp?'
payload = dict()
payload['_FORM'] = 'AD1'
payload['_EVT'] = 'ADD'
payload['_RTN'] = 'DATA'
payload['FC'] = 'Add'
payload['_OUT'] = 'XML'
payload['_EOT'] = 'TRUE'
data = {'F1': ['A','A','A'], 'F3': ['HELLO', 'GOODBYE', 'HELLO_AGAIN'], 'F16': ['EA','BX','CA']}
df = pd.DataFrame(data)
“有效载荷”我创建的词典是所有参数都不改变请求,这些参数本质上是硬编码的,不是熊猫数据框的一部分。我将最终将这个字典与数据帧的每一行中的值结合起来,然后将它传递给request.get
我想我需要使用或者使用apply或itterrows,但我似乎无法弄清楚。
我该怎么写这段代码?
答
不知道为什么要使用熊猫,你可以得到有效载荷的列表,
F1 = ['A','A','A']
F3 = ['HELLO', 'GOODBYE', 'HELLO_AGAIN']
F16 = ['EA','BX','CA']
payloads = [dict(payload,**{'F1': F1, 'F3': F3, 'F16': F16}) for F1,F3,F16 in zip(F1,F3,F16)]
编辑以遍历: 如果必须使用熊猫的话,你可以使用to_dict('records')
作为this stackoverflow question讨论。然后,文件解释如何formulate the actual requests.
payloads = [dict(payload, **params) for params in df.to_dict('records')]
gets = [requests.get(site, params=payload) for payload in payloads]
# to check that the urls were as you thought
for r in gets:
print r.url
谢谢你的回答。要继续此练习,您将如何将“有效内容”传递到请求库,以便它为每个字典生成一个请求?另外,你可以用熊猫函数“to-dict('records')”来做到这一点吗?我使用Pandas来操纵数据,然后将其放入将用于请求变量参数的数据框中。 http://stackoverflow.com/questions/21190323/passing-records-parameter-to-pandas-to-dict-method –
正是我在找什么;非常感谢! –