2016-06-07 110 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

正是我在找什麼;非常感謝! –