2016-06-07 5 views
1

저는 취미 프로그래머이며 실제 문제를 해결하고 싶습니다. 나는 Get을 사용하여 레코드를 업데이트/추가 할 수있게하는 API를 노출하는 소프트웨어 시스템 사용자입니다. 가져온 데이터를 가지고 팬더로 시스템을 수정하고 행을 반복하고 URL을 동적으로 생성하는 가장 좋은 방법을 모릅니다.팬 데스 (Pandas) 데이터 프레임과 함께 요청을 사용하여 여러 개의 Get http 요청을 만드는 방법은 무엇입니까?

I과 유사한 각 행에 대해 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) 

은 "페이로드"나는 내 코드 설정의 시작을 포함했다 아래

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

을 내가 만든 사전은 요청에 대해 변경되지 않는 모든 매개 변수이며, 본질적으로 하드 코딩되며 팬더 데이터 프레임의 일부가 아닙니다. 나는이 사전을 request.get에 전달하기 전에 데이터 프레임의 각 행에있는 값과 궁극적으로 결합 할 것이다.

나는 어느 쪽인가를 사용하거나 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)] 

편집으로 반복하는 페이로드의 목록을 얻을 수 있습니다 : 당신이 다음 팬더를 사용해야합니다 경우 this stackoverflow question에서 논의 된 바와 같이, 당신은 to_dict('records')을 사용할 수 있습니다. 그런 다음 문서에 설명하는 방법 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

정확히 내가 뭘 찾고 있었는지; 정말 고맙습니다! –

관련 문제