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

如何为Pandas DataFrame规范化深度嵌套的JSON彩妆产品数据

解决彩妆产品颜色变体提取问题

目标格式示例

最终要生成的DataFrame结构如下(每个产品一行,颜色变体对应列存为列表):

product_idproduct_namecolor_namescolor_hex_codesvariant_skus
1哑光口红['复古红', '豆沙色']['#C41E3A', '#B08968']['LIP001-R', 'LIP001-B']
2高光粉饼['香槟金', '月光银', '古铜棕']['#FADADD', '#E8F4F8', '#D2B48C']['HIG001-C', 'HIG001-S', 'HIG001-T']

先明确数据结构前提

假设你的原始嵌套数据结构如下(匹配你提到的已验证可访问字段):

raw_data = [
    {
        "product_id": 1,
        "product_name": "哑光口红",
        "variants": [
            {"color_name": "复古红", "hex": "#C41E3A", "sku": "LIP001-R"},
            {"color_name": "豆沙色", "hex": "#B08968", "sku": "LIP001-B"}
        ]
    },
    {
        "product_id": 2,
        "product_name": "高光粉饼",
        "variants": [
            {"color_name": "香槟金", "hex": "#FADADD", "sku": "HIG001-C"},
            {"color_name": "月光银", "hex": "#E8F4F8", "sku": "HIG001-S"},
            {"color_name": "古铜棕", "hex": "#D2B48C", "sku": "HIG001-T"}
        ]
    }
]

方案1:修复手动嵌套循环问题

你之前手动循环出错,大概率是没给每个产品单独生成变体列表,而是把所有产品的变体合并到了同一个列表里。按以下方式遍历即可:

import pandas as pd

processed_data = []
for product in raw_data:
    # 为每个产品单独提取基础信息和变体列表
    product_entry = {
        "product_id": product["product_id"],
        "product_name": product["product_name"],
        "color_names": [var["color_name"] for var in product["variants"]],
        "color_hex": [var["hex"] for var in product["variants"]],
        "variant_skus": [var["sku"] for var in product["variants"]]
    }
    processed_data.append(product_entry)

# 转换为目标DataFrame
df = pd.DataFrame(processed_data)

方案2:解决json_normalize的KeyError问题

KeyError通常是因为部分产品缺失variants字段,或者路径拼写错误。用errors='ignore'忽略缺失字段,再通过分组聚合回列表格式:

# 先扁平化变体数据,保留产品元数据
flat_variants = pd.json_normalize(
    raw_data,
    record_path="variants",  # 替换成你实际的变体嵌套路径
    meta=["product_id", "product_name"],  # 替换成你需要保留的产品字段
    errors="ignore"  # 跳过缺失变体的产品,避免报错
)

# 按产品分组,将每个变体字段聚合为列表
df = flat_variants.groupby(["product_id", "product_name"]).agg(
    color_names=("color_name", list),
    color_hex=("hex", list),
    variant_skus=("sku", list)
).reset_index()

常见问题排查

  • 若仍报KeyError:检查record_path的路径是否与原始数据完全一致,比如是不是color_variants而非variants?可以用print(raw_data[0].keys())确认顶级字段,print(raw_data[0]["variants"][0].keys())确认变体内部字段。
  • 若得到单一列表:手动循环时不要将所有产品的变体追加到全局列表,要为每个产品单独生成变体列表后再加入processed_data。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:02