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

如何在Pandas中展开含嵌套字典与列表的列?

解决DataFrame嵌套字典列表列的展开问题

问题背景

从MySQL获取的DataFrame中,b列包含嵌套的字典与列表结构,需要将其展开为扁平的表格格式,示例数据如下:

import pandas as pd

my_dict = {'id': [1, 2, 3],
           'b': [{'100': [{'p': 10, 'max': 20, 'min': 15},
                          {'p': 20, 'max': 30, 'min': 20}]
                 },
                 {'101': [{'p': 100, 'max': 200, 'min': 150}],
                  '102': [{'p': 105, 'max': 205, 'min': 155},
                          {'p': 102, 'max': 202, 'min': 152}]},
                 {'103': [{'p': 210, 'max': 2110, 'min': 1115}]}]}
df = pd.DataFrame(my_dict)

期望输出格式:

id  key    p   max   min
0   1  100   10    20    15
1   1  100   20    30    20
2   2  101  100   200   150
3   2  102  105   205   155
4   2  102  102   202   152
5   3  103  210  2110  1115

高效解决方案

直接通过列表推导式遍历原始数据,一次性生成所有扁平行,再构造目标DataFrame,这种方法避免了多次DataFrame操作的开销,在数据量大时效率更优:

# 生成展开后的扁平数据列表
expanded_data = [
    {'id': row['id'], 'key': key, **item}
    for _, row in df.iterrows()
    for key, sub_list in row['b'].items()
    for item in sub_list
]

# 转换为DataFrame
result_df = pd.DataFrame(expanded_data)
print(result_df)

代码说明

  • 遍历原始DataFrame的每一行,关联对应的id;
  • 拆解b列中的每个字典,取出键(作为key列)和对应的列表;
  • 遍历列表中的每个字典,将其键值对与id、key合并为一个扁平字典;
  • 所有扁平字典组成列表后,直接转为DataFrame,得到目标格式。

这种方法逻辑直观,且相较于多次调用explode或pd.json_normalize的链式操作,减少了中间DataFrame的生成与转换步骤,运行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:02:03