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

如何将字典列表转换为指定结构的Pandas DataFrame?

问题描述

现有如下字典列表:

orderlist = [
    {
        'order_id': 5,
        'status': 'completed',
        'line_items': [{'product_id': 6,'name': 'headphone'} , {'product_id': 7,'name': 'airbuds'} ]
    },
    {
        'order_id': 6,
        'status': 'pending',
        'line_items': [{'product_id': 8,'name': 'smartwatch'} , {'product_id': 9,'name': 'smartphone'} ]
    },
]

想要生成结构如下的DataFrame:

order_id        status      product_id          name 
    5          completed        6               headphone
    5          completed        7               airbuds
    6          pending          8               smartwatch
    6          pending          9               smartphone

直接用pd.DataFrame(orderlist)生成的结果不符合预期,需要调整方法。

解决方法

方法一:分步处理(先展开再拆分)

先将line_items列的列表元素拆分成单独行,再把字典类型的line_items拆分成独立列:

import pandas as pd

# 初始生成DataFrame
df_order = pd.DataFrame(orderlist)
# 展开line_items列,每个列表元素占一行
df_order = df_order.explode('line_items')
# 将line_items的字典拆分为单独列,并和原表合并
df_order = pd.concat([df_order.drop('line_items', axis=1), df_order['line_items'].apply(pd.Series)], axis=1)

方法二:直接用json_normalize一步到位

使用pd.json_normalize可以直接处理嵌套结构,指定要展开的嵌套字段和需要保留的顶层字段:

import pandas as pd

df_order = pd.json_normalize(
    orderlist,
    record_path='line_items',  # 指定要展开的嵌套列表字段
    meta=['order_id', 'status']  # 指定要保留的顶层字段
)
# 调整列顺序和目标结构一致
df_order = df_order[['order_id', 'status', 'product_id', 'name']]

这种方法更简洁,直接生成符合要求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:11:08