2016-06-07 77 views
1

我是一个业余爱好程序员,想解决我遇到的现实世界问题。我是一个软件系统的用户,公开了一个允许用Get更新/添加记录的api。我将导入的数据修改为Pandas,但不知道迭代各行并动态创建URL的最佳方式。如何使用Pandas数据框的请求创建多个Get http请求?

我想创建于各行的URL类似于:

http://fakesite.org/servlet/Erp?_form=AD1&_EVT=ADD&_RTN=DATA&FC=Add&_f1=A&_f3=HELLO&f16=EA&_OUT=XML&_EOT=TRUE

下面我已经列入我的代码设置的开头:

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,但我似乎无法弄清楚。

我该怎么写这段代码?

回答

1

不知道为什么要使用熊猫,你可以得到有效载荷的列表,

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 
+0

谢谢你的回答。要继续此练习,您将如何将“有效内容”传递到请求库,以便它为每个字典生成一个请求?另外,你可以用熊猫函数“to-dict('records')”来做到这一点吗?我使用Pandas来操纵数据,然后将其放入将用于请求变量参数的数据框中。 http://stackoverflow.com/questions/21190323/passing-records-parameter-to-pandas-to-dict-method –

+0

正是我在找什么;非常感谢! –