如何遍历Dataframe生成API请求,批量更新电商商品及变体价格?
遍历商品Dataframe生成对应API请求体的实现方案
将电子表格数据导入包含商品信息的Dataframe后,需要通过API发送PUT请求更新电商平台的商品价格,核心需求是:
- 按
Product_Id分组处理,同一商品的多个变体信息需合并到同一个请求体中 - 根据商品是否有变体、变体数量,匹配对应的API请求格式
示例Dataframe如下:
| Product_Id | Variations_id | Price |
|---|---|---|
| id001 | v0101 | 100 |
| id002 | v0201 | 120 |
| id003 | v0301 | 110 |
| id003 | v0302 | 115 |
| id004 | v0401 | 120 |
| id005 | 130 |
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}")
关键说明
- 分组处理:通过
groupby("Product_Id")将同一商品的所有行聚合,确保变体不会被拆分 - 空值处理:提前将空字符串转为
None,避免误判变体存在 - 变体完整性:对于多变体商品,必须包含所有变体数据,否则会导致平台上的变体丢失
- 请求复用:将请求头提前定义,避免重复生成,提升代码效率
内容的提问来源于stack exchange,提问作者Luis R
相关产品推荐
相关产品推荐

