如何在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
相关产品推荐
相关产品推荐

