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

如何遍历Dataframe生成API请求,批量更新电商商品及变体价格?

遍历商品Dataframe生成对应API请求体的实现方案

将电子表格数据导入包含商品信息的Dataframe后,需要通过API发送PUT请求更新电商平台的商品价格,核心需求是:

  • 按Product_Id分组处理,同一商品的多个变体信息需合并到同一个请求体中
  • 根据商品是否有变体、变体数量,匹配对应的API请求格式

示例Dataframe如下:

Product_IdVariations_idPrice
id001v0101100
id002v0201120
id003v0301110
id003v0302115
id004v0401120
id005130

API请求场景说明

场景1:商品无变体

当Variations_id为空时,直接更新商品基础价格:

import requests
import json

token_key = "你的令牌"
base_url = "some_api_url"

product_id = "id005"
price = 130

url = base_url + str(product_id)
body = {'price': int(price)}

payload = json.dumps(body)
headers = {
    'Authorization': f'Bearer {token_key}',
    'Content-Type': 'application/json'
}

response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)

场景2:商品有单个变体

商品仅存在一个变体时,请求体包含单个变体的ID和价格:

import requests
import json

token_key = "你的令牌"
base_url = "some_api_url"

product_id = "id001"
variation_id = "v0101"
price = 100

url = base_url + str(product_id)
body = {
    "variations": [{
        "id": str(variation_id),
        "price": int(price)
    }]   
}

payload = json.dumps(body)
headers = {
    'Authorization': f'Bearer {token_key}',
    'Content-Type': 'application/json'
}

response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)

场景3:商品有两个及以上变体

需将该商品的所有变体ID和价格全部加入请求体,遗漏任意变体将导致该变体从平台消失:

import requests
import json

token_key = "你的令牌"
base_url = "some_api_url"

product_id = "id003"

body =  {
    "variations": [
        {"id": "v0301", "price": 110},
        {"id": "v0302", "price": 115}
    ]
}

payload = json.dumps(body)
headers = {
    'Authorization': f'Bearer {token_key}',
    'Content-Type': 'application/json'
}

response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)

完整实现代码

以下代码实现Dataframe的遍历、分组和请求发送逻辑:

import pandas as pd
import requests
import json

# 初始化Dataframe(实际场景从电子表格导入,比如pd.read_excel/pd.read_csv)
data = [
    ["id001", "v0101", 100],
    ["id002", "v0201", 120],
    ["id003", "v0301", 110],
    ["id003", "v0302", 115],
    ["id004", "v0401", 120],
    ["id005", "", 130]
]
df = pd.DataFrame(data, columns=["Product_Id", "Variations_id", "Price"])

# 处理空值:将空字符串转为None,方便判断
df["Variations_id"] = df["Variations_id"].replace("", None)

token_key = "你的令牌"
base_url = "some_api_url"
headers = {
    'Authorization': f'Bearer {token_key}',
    'Content-Type': 'application/json'
}

# 按Product_Id分组遍历
for product_id, group in df.groupby("Product_Id"):
    # 获取当前商品的所有变体数据,过滤掉空值(无变体的情况)
    variations = group.dropna(subset=["Variations_id"]).to_dict("records")
    
    url = base_url + str(product_id)
    if len(variations) == 0:
        # 场景1:无变体,取第一条数据的价格
        price = group.iloc[0]["Price"]
        body = {'price': int(price)}
    else:
        # 场景2/3:有变体,生成变体列表
        body = {
            "variations": [
                {"id": str(v["Variations_id"]), "price": int(v["Price"])} 
                for v in variations
            ]
        }
    
    # 发送请求
    payload = json.dumps(body)
    response = requests.request("PUT", url, headers=headers, data=payload)
    print(f"商品{product_id}更新结果:{response.text}")

关键说明

  1. 分组处理:通过groupby("Product_Id")将同一商品的所有行聚合,确保变体不会被拆分
  2. 空值处理:提前将空字符串转为None,避免误判变体存在
  3. 变体完整性:对于多变体商品,必须包含所有变体数据,否则会导致平台上的变体丢失
  4. 请求复用:将请求头提前定义,避免重复生成,提升代码效率

内容的提问来源于stack exchange,提问作者Luis R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:30:46