2016-07-12 3 views
1

죄송 하나 팬더 DataFrame 모든 값을 배치하는 동안 여러 목록을 반복하는 방법을 문의하는 방법을 알고하지 않았다 : 나는 ExactTarget 세일즈 포스 마케팅 API 함께 일하고서로 다른 값하지만 같은 변수 긴 제목

을 , API 호출에서 여러 사전 객체를 반복하려고하지만 그 중 일부는 중첩되어 다른 API 응답과 동일한 이름을 갖습니다. 동일한 명명 된 변수를 반복하여 데이터 프레임으로 반복하는 방법에 대해 혼란스러워합니다.

(ClickEvent){ 
    Client = 
     (ClientID){ 
     ID = 11111111 
     } 
    PartnerKey = None 
    CreatedDate = 2016-07-12 00:40:17 
    ModifiedDate = 2016-07-12 00:40:17 
    ID = 11111111 
    ObjectID = "11111111" 
    SendID = 11111111 
    SubscriberKey = "[email protected]" 
    EventDate = 2016-07-12 00:40:17 
    EventType = "Click" 
    TriggeredSendDefinitionObjectID = None 
    BatchID = 1 
    URLID = 11111111 
    URL = aaa.com 

내가 "된 ClientID"에서 "ID"에 대한 별도의 dataframe 열을 만들려하지만 난 이미 명명 된 또 다른 변수의 문제로 실행하고 있습니다 :

는 API 호출의 출력 "신분증". "ClientID"를 반복하고 ID 값을 얻고 다른 값을 가져 와서 데이터 프레임에 배치하려면 어떻게해야합니까?

내 코드가 데이터 프레임에 데이터를 배치 할 수 있지만 특정 클라이언트 ID를 가져 오지 못했습니다. 이 출력은 지금 모습입니다 : 당신이 "된 ClientID"에서 ID 번호가 아닌 다른 쓰레기를하려는 경우에만 볼 수 있듯이

 BatchID       ClientID   CreatedDate \ 
0   1 (ClientID){\n ID = 10914162\n } 2016-02-23 13:08:59 
1   1 (ClientID){\n ID = 10914162\n } 2016-02-23 13:11:49 

코드 : 나는 이것을 시도하고있다

import ET_Client 
import pandas as pd 



try: 
    debug = False 
    stubObj = ET_Client.ET_Client(False, debug) 

    ## Modify the date below to reduce the number of results returned from the request 
    ## Setting this too far in the past could result in a very large response size 
    retrieveDate = '2016-07-11T13:00:00.000' 

    #ET call for clicks 
    print '>>>ClickEvents' 
    getClickEvent = ET_Client.ET_ClickEvent() 
    getClickEvent.auth_stub = stubObj 
    getResponse = getClickEvent.get() 
    ResponseResults = getResponse.results 
    #print ResponseResults 

    Client = [] 
    partner_keys = [] 
    created_dates = [] 
    modified_date = [] 
    ID = [] 
    ObjectID = [] 
    SendID = [] 
    SubscriberKey = [] 
    EventDate = [] 
    EventType = [] 
    TriggeredSendDefinitionObjectID = [] 
    BatchID = [] 
    URLID = [] 
    URL = [] 



    for ClickEvent in ResponseResults: 
     Client.append(str(ClickEvent['Client'])) 
     partner_keys.append(ClickEvent['PartnerKey']) 
     created_dates.append(ClickEvent['CreatedDate']) 
     modified_date.append(ClickEvent['ModifiedDate']) 
     ID.append(ClickEvent['ID']) 
     ObjectID.append(ClickEvent['ObjectID']) 
     SendID.append(ClickEvent['SendID']) 
     SubscriberKey.append(ClickEvent['SubscriberKey']) 
     EventDate.append(ClickEvent['EventDate']) 
     EventType.append(ClickEvent['EventType']) 
     TriggeredSendDefinitionObjectID.append('TriggeredSendDefinitionObjectID') 
     BatchID.append(ClickEvent['BatchID']) 
     URLID.append(ClickEvent['URLID']) 
     URL.append(ClickEvent['URL']) 


    df = pd.DataFrame({'ClientID': Client, 'PartnerKey': partner_keys, 
        'CreatedDate' : created_dates, 'ModifiedDate': modified_date, 
        'ID':ID, 'ObjectID': ObjectID,'SendID':SendID,'SubscriberKey':SubscriberKey, 
        'EventDate':EventDate,'EventType':EventType,'TriggeredSendDefinitionObjectID':TriggeredSendDefinitionObjectID, 
        'BatchID':BatchID,'URLID':URLID,'URL':URL}) 

    print df 

해결책이 있지만 작동하지 않음 :

for ClickEvent in ResponseResults(): 
    if 'ClientID' in ClickEvent: 
     ID.append(ClickEvent['Client']: 
      print Client 

감사합니다.

-EDIT- 위의 API 호출 결과는 시스템이 출력하는 방식과 정확히 일치하며 실제 JSON 응답을 어떻게해야합니까?

데이터 프레임은 I는 다음과 같이 할 :

BatchID       ClientID   CreatedDate \ 
0   1       111111111  2016-02-23 13:08:59 
1   1       111111111  2016-02-23 13:11:49 

그냥 내가 위에서 제출 한 데이터의 "된 ClientID"부분에 다른 물건을 돼요. 희망이 도움이됩니다. 대신 목록에 전체 클라이언트 객체를 추가의

+0

API (JSON?)의 실제 응답과 DataFrame의 마지막 모습을 보여줄 수 있습니까? – user666

+0

님이 답변을 게시 한 기본 게시물에서 수정했습니다. API가 위와 같이 출력됩니다. – RustyShackleford

답변

1

:

Client.append(str(ClickEvent['Client'])) 

는 개체의 바로 ID 필드를 저장하려고 했습니까? 어쩌면 뭔가 :

Client.append(str(ClickEvent['Client']['ID'])) 
+0

지옥 나중에 그게 !!!!! 매우 친절한 낯선 사람 감사합니다! – RustyShackleford

관련 문제