在将所有值放在一个Pandas DataFrame中时,如何迭代具有不同值但相同变量的多个列表

时间:2016-07-12 17:46:53

标签: python-2.7 pandas dataframe exacttarget

对不起长标题,不知道怎么问:

我正在使用ExactTarget Salesforce Marketing API,尝试从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 = "azfull@usa.net"
   EventDate = 2016-07-12 00:40:17
   EventType = "Click"
   TriggeredSendDefinitionObjectID = None
   BatchID = 1
   URLID = 11111111
   URL = aaa.com

我想为“ClientID”下的“ID”创建一个单独的数据帧列,但我遇到了另一个已经命名为“ID”的变量。 如何迭代“ClientID”并获取ID值以及获取其他值并将其置于数据框中?

我的代码已经能够将数据放在数据框中,但我没有获得特定的客户端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   

正如您所看到的,只想要ID号而不是“ClientID”下的其他垃圾

代码:

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

提前谢谢你。

CNC中 上面的API调用的输出正是系统输出它的方式,我应该如何使它成为实际的JSON响应?

数据框我想看起来像这样:

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

我不想在上面提交的数据的“ClientID”部分中包含其他内容。希望这可以帮助。

1 个答案:

答案 0 :(得分:1)

而不是将整个Client对象附加到列表中:

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

您是否尝试仅存储对象的ID字段?也许是这样的:

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