You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历CSV数据集将值传入Google DFP API的line_item字典?

解决方案:遍历CSV数据创建DFP Line Items

嘿,我来帮你搞定这个遍历CSV创建DFP Line Item的问题!你当前代码的核心问题是把整列数据的列表传给了函数,而不是逐行处理单个条目,另外还存在字段名不匹配的小问题。下面是最优的实现方式:

核心思路

  1. 用Pandas高效遍历CSV的每一行数据
  2. 确保DFP API要求的字段格式(比如targetedPlacementIds必须是列表)
  3. 修正字段名匹配问题(你的DataFrame列名是order_id,但原代码用了order)
  4. 可选:批量创建Line Item以减少API请求次数(提升效率)

方式一:逐行处理(适合小数据量)

这种方式逻辑清晰,每处理一行就调用一次API:

from googleads import dfp
import pandas as pd

def create_single_line_item(client, order_id, targeted_placement_id, campaign_name):
    line_item_service = client.GetService('LineItemService')
    
    # 注意:DFP创建Line Item需要必填字段,这里补充了基础必填项,你需要根据实际需求调整
    line_item = {
        'orderId': order_id,
        'name': campaign_name,
        'targeting': {
            'inventoryTargeting': {'targetedPlacementIds': [targeted_placement_id]}
        },
        'lineItemType': 'STANDARD',
        'costType': 'CPM',
        'costPerUnit': {'microAmount': 1000000},  # 示例:1 USD
        'endDateTime': {'date': {'year': 2024, 'month': 12, 'day': 31}, 'hour': 23, 'minute': 59}
    }
    
    # 创建单个Line Item
    created_item = line_item_service.createLineItems([line_item])[0]
    
    # 从返回结果中提取目标Placement ID(DFP返回值里没有直接的targetedPlacementId字段)
    targeted_id = created_item['targeting']['inventoryTargeting']['targetedPlacementIds'][0]
    print(f'Target id "{targeted_id}", in order id "{created_item["orderId"]}", named "{created_item["name"]}" was created')

if __name__ == '__main__':
    dfp_client = dfp.DfpClient.LoadFromStorage()
    df = pd.read_csv('ad_data.csv')
    
    # 遍历DataFrame的每一行
    for _, row in df.iterrows():
        # 严格对应CSV里的列名
        order_id = row['order_id']
        targeted_placement_id = row['targeted_placement_id']
        campaign_name = row['campaign']
        
        create_single_line_item(dfp_client, order_id, targeted_placement_id, campaign_name)

方式二:批量创建(适合大数据量)

如果你的CSV数据较多,批量创建能减少API请求次数,提升效率:

from googleads import dfp
import pandas as pd

def bulk_create_line_items(client, line_items_data):
    line_item_service = client.GetService('LineItemService')
    line_items_list = []
    
    for data in line_items_data:
        line_item = {
            'orderId': data['order_id'],
            'name': data['campaign'],
            'targeting': {
                'inventoryTargeting': {'targetedPlacementIds': [data['targeted_placement_id']]}
            },
            'lineItemType': 'STANDARD',
            'costType': 'CPM',
            'costPerUnit': {'microAmount': 1000000},
            'endDateTime': {'date': {'year': 2024, 'month': 12, 'day': 31}, 'hour': 23, 'minute': 59}
        }
        line_items_list.append(line_item)
    
    # 一次性创建所有Line Item
    created_items = line_item_service.createLineItems(line_items_list)
    
    # 遍历打印结果
    for item in created_items:
        targeted_id = item['targeting']['inventoryTargeting']['targetedPlacementIds'][0]
        print(f'Target id "{targeted_id}", in order id "{item["orderId"]}", named "{item["name"]}" was created')

if __name__ == '__main__':
    dfp_client = dfp.DfpClient.LoadFromStorage()
    df = pd.read_csv('ad_data.csv')
    
    # 把DataFrame转成字典列表,方便批量处理
    line_items_data = df.to_dict('records')
    bulk_create_line_items(dfp_client, line_items_data)

关键注意点

  • 字段名匹配:一定要确保代码里的列名和CSV里的完全一致(比如你的CSV列是order_id,就不能写成order)
  • API必填字段:DFP的Line Item创建接口需要很多必填参数(比如lineItemType、costType),你之前硬编码能运行是因为可能隐含了这些字段,现在必须显式补充
  • 格式要求:targetedPlacementIds必须是列表类型,哪怕只有一个ID也要用[]包裹

内容的提问来源于stack exchange,提问作者Cam Shan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:04:36