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

如何将字典列表转换为DataFrame?附示例数据及期望输出

实现方案:将嵌套字典列表转换为指定格式DataFrame

假设你的原始数据结构类似这样(部分box是单个字典,部分是字典列表):

list_of_dict = [
    {"id": 1, "name": "A", "box": {"x": 10, "y": 20, "w": 30}},
    {"id": 2, "name": "B", "box": [{"x": 15, "y": 25, "w": 35}, {"x": 40, "y": 50, "w": 60}]},
    {"id": 3, "name": "C", "box": {"x": 70, "y": 80, "w": 90}}
]

目标是把每个box条目拆成单独一行,同时保留原数据的其他字段,最终生成结构规整的DataFrame。

方法一:列表推导式扁平化(直观易理解)

通过遍历原始数据,先统一box的格式为列表,再逐个展开合并字段:

import pandas as pd

# 1. 扁平化数据
flattened_data = []
for item in list_of_dict:
    # 统一box为列表:如果是单个字典就转成单元素列表
    boxes = item["box"] if isinstance(item["box"], list) else [item["box"]]
    # 每个box生成一条记录,合并原字段和box字段
    for box in boxes:
        merged_item = {**item, **box}
        del merged_item["box"]  # 删除原box字段避免重复
        flattened_data.append(merged_item)

# 2. 转换为DataFrame
df = pd.DataFrame(flattened_data)
print(df)

输出结果:

id name   x   y   w
0   1    A  10  20  30
1   2    B  15  25  35
2   2    B  40  50  60
3   3    C  70  80  90

方法二:Pandas函数式处理(更简洁)

利用Pandas的explode和apply(pd.Series)实现展开:

import pandas as pd

# 1. 先转为初始DataFrame,统一box为列表格式
df = pd.DataFrame(list_of_dict)
df["box"] = df["box"].apply(lambda x: x if isinstance(x, list) else [x])

# 2. 展开box列表为多行
df_exploded = df.explode("box", ignore_index=True)

# 3. 将box字典展开为独立列,合并到原DataFrame
df_final = pd.concat([df_exploded.drop("box", axis=1), df_exploded["box"].apply(pd.Series)], axis=1)
print(df_final)

注意事项

  • 如果不同box的键不一致(比如有的有h有的没有),Pandas会自动为缺失的键填充NaN,保证列结构统一。
  • 两种方法都能处理任意长度的box列表,以及单个box的情况,兼容性强。

内容的提问来源于stack exchange,提问作者BORRA PREMA KISHORE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:15:42