【发布时间】:2018-12-12 06:55:58
【问题描述】:
我正在使用 Pandas read_excel 函数为我的工作簿中的每一列创建 data_frames。该数据与Google DFP API 一起用于在我们的广告服务器中创建Line Items。
我正在循环并将数据从我的 data_frames 传递到 dict 作为值。以下是我的代码:
import pandas as pd
from googleads import dfp
workbook = 'dfp-migration-data.xlsx'
sheet = 'main'
df = pd.read_excel(workbook, sheet_name=sheet)
campaign_id = df['order_id'].tolist()
campaign = df['order'].tolist()
target = df['placement_id']
placement_id = []
def create_line_item(client, orders):
line_item_service = client.GetService('LineItemService')
line_items = []
for index, order in enumerate(orders):
line_item = {
'name': line_item_name[index],
'orderId': int(campaign_id[index]),
'targeting': {
'inventoryTargeting': {
'targetedPlacementIds': placement_id[index]},
},
line_items.append(line_item)
# Add line items to DFP
line_items = line_item_service.createLineItems(line_items)
# Display results
for line_item in line_items:
print(f"Order ID: {line_item['orderId']}"
f"Line Item: {line_item['name']}"
f"Placement IDs: {line_item['targeting']['inventoryTargeting']['targetedPlacementIds']}\n"
if __name__ == '__main__':
dfp_client = dfp.DfpClient.LoadFromStorage()
create_line_item(dfp_client, campaign)
我遇到的问题是 target 数据框,它在每个单元格中有多个值。例如
df['placement_id'].head()
0 28816768, 28809669, 28809672, 28809675, 288092...
1 28825664, 28825670, 28825511, 28825673, 288256...
2 28825538, 28816006, 28814215, 28825544, 288254...
Name: placement_id, dtype: object
将placement_id 传递给targetedPlacementIds 键时,我收到一个错误,这是有道理的,因为我的数据框中的数据是一个字符串。但是,如果我尝试用 int() 函数包装“placement_id”,我会收到 'ValueError: invalid literal for int() with base 10' 错误。我曾尝试在 Pandas 中使用 to_numbers() 和 astype(int()) 函数,但收到相同的错误。
如何将placement_ids 从字符串转换为整数,以便能够将数据传递到我的line_item 字典中?
【问题讨论】:
标签: python pandas google-dfp