如何迭代具有不同值但相同变量的多个列表,同时将所有值放在一个 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']))
抱歉标题太长,不知道怎么问:
我正在使用 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']))