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

How to iterate over multiple lists with different values but same variables while placing all values in one Pandas DataFrame

抱歉标题太长,不知道怎么问:

我正在使用 ExactTarget Salesforce Marketing API,尝试从 API 调用迭代多个字典 objects,但其中一些是嵌套的并且与其他 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   

如你所见只想要身份证号码不想要其他"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

提前谢谢你。

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

我想要的数据框是这样的:

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

只是不想在我上面提交的数据的 "ClientID" 部分中添加其他内容。希望这可以帮助。

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

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

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

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