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

Python将含必填可选字段的嵌套列表转换为pandas DataFrame

嵌套列表转结构化产品DataFrame实现

字段规则

涉及三个产品字段:

  • LineNumber:必填,行号
  • ManufacturersProductId:必填,厂商产品ID
  • InternationalProductClassCode:可选,国际产品分类编码

原始输入为按顺序存储字段键值对的嵌套列表,直接使用pd.DataFrame(data)会生成仅包含键、值两列的长表,无法实现每行对应一条完整产品记录的需求。

实现思路

每条产品记录均以LineNumber字段作为起始标记,遍历原始键值对列表时,遇到LineNumber即初始化新的产品记录,后续遍历到的同组字段全部追加到当前记录,直到下一个LineNumber出现,最终将整理完成的记录列表传入pandas生成DataFrame即可,可选字段缺失时会自动填充为空值。

完整代码

import pandas as pd

# 原始嵌套列表数据
data = [['LineNumber', '1'],
 ['ManufacturersProductId', '7000000142'],
 ['LineNumber', '2'],
 ['ManufacturersProductId', '7000000144'],
 ['LineNumber', '3'],
 ['ManufacturersProductId', '7000000145'],
 ['LineNumber', '4'],
 ['ManufacturersProductId', '7000000147'],
 ['LineNumber', '5'],
 ['ManufacturersProductId', '7000000149'],
 ['LineNumber', '6'],
 ['ManufacturersProductId', '7000000151'],
 ['LineNumber', '7'],
 ['ManufacturersProductId', '7000000157'],
 ['InternationalProductClassCode', 'EC012017'],
 ['LineNumber', '8'],
 ['ManufacturersProductId', '7000000158'],
 ['InternationalProductClassCode', 'EC012017'],
 ['LineNumber', '9'],
 ['ManufacturersProductId', '7000000159'],
 ['InternationalProductClassCode', 'EC012017'],
 ['LineNumber', '10'],
 ['ManufacturersProductId', '7000000182'],
 ['InternationalProductClassCode', 'EC011984'],
 ['LineNumber', '11'],
 ['ManufacturersProductId', '7000000208'],
 ['InternationalProductClassCode', 'EC011098'],
 ['LineNumber', '12'],
 ['ManufacturersProductId', '7000000214'],
 ['InternationalProductClassCode', 'EC011098'],
 ['LineNumber', '13'],
 ['ManufacturersProductId', '7000000215'],
 ['InternationalProductClassCode', 'EC011098'],
 ['LineNumber', '14'],
 ['ManufacturersProductId', '7000000216'],
 ['InternationalProductClassCode', 'EC011098']]

records = []
current_prod = {}
for field, val in data:
    # 检测到行号字段,说明开始一条新产品记录
    if field == 'LineNumber':
        if current_prod:
            records.append(current_prod)
        current_prod = {field: val}
    else:
        current_prod[field] = val
# 追加最后一条产品记录
records.append(current_prod)

# 生成DataFrame
df = pd.DataFrame(records)
# 按需调整数据类型,比如把行号转为整数
df['LineNumber'] = df['LineNumber'].astype(int)
# 如需固定列顺序,可执行下方代码
# df = df[['LineNumber', 'ManufacturersProductId', 'InternationalProductClassCode']]

输出效果

最终生成的DataFrame共14行,对应14条产品记录:

  • 前6条无分类编码的产品,InternationalProductClassCode列自动填充为空值
  • 后续带分类编码的产品会正确匹配对应编码值
  • 可通过列重排代码固定三列的展示顺序,完全匹配结构化表需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:18:19