如何将含嵌套字典列表的字典列表转换为Pandas DataFrame?
两类嵌套字典列表转Pandas DataFrame的实现方法
场景一:嵌套字典含带序号的键(输出宽格式DataFrame)
示例输入数据
myDict = [ {'Name': 'Jack', 'Children': [{'Child_1': 'Sarah'}, {'Child_2': 'Mary'}], 'Favorite_Colors': [{'Color_1': 'Blue'}, {'Color_2': 'Red'}]}, {'Name': 'Jill', 'Children': [{'Child_1': 'Carl'}, {'Child_2': 'Sam'}], 'Favorite_Colors': [{'Color_1': 'Green'}, {'Color_2': 'Yellow'}]} ]
实现代码
import pandas as pd # 预处理数据:合并嵌套字典 processed_data = [] for item in myDict: merged_dict = {'Name': item['Name']} # 合并Children列表内的所有小字典 merged_dict.update({k: v for sub_dict in item['Children'] for k, v in sub_dict.items()}) # 合并Favorite_Colors列表内的所有小字典 merged_dict.update({k: v for sub_dict in item['Favorite_Colors'] for k, v in sub_dict.items()}) processed_data.append(merged_dict) # 生成宽格式DataFrame df = pd.DataFrame(processed_data) print(df)
实现逻辑
- 遍历原始字典列表中的每个元素,先保留顶层的
Name字段; - 用字典推导式将
Children和Favorite_Colors列表中的所有嵌套小字典合并为一个大字典; - 将处理后的字典列表传入
pd.DataFrame,直接生成宽格式结果。
场景二:嵌套字典的键无序号(输出长格式DataFrame)
示例输入数据
myDict = [ {'Name': 'Jack', 'Children': [{'Child': 'Sarah'}, {'Child': 'Mary'}], 'Favorite_Colors': [{'Color': 'Blue'}]}, {'Name': 'Jill', 'Children': [{'Child': 'Carl'}], 'Favorite_Colors': [{'Color': 'Green'}, {'Color': 'Yellow'}]} ]
实现代码
import pandas as pd from itertools import zip_longest # 预处理数据:展开嵌套列表并对齐缺失值 processed_data = [] for item in myDict: name = item['Name'] # 提取所有Child值 child_list = [sub_dict['Child'] for sub_dict in item['Children']] # 提取所有Color值 color_list = [sub_dict['Color'] for sub_dict in item['Favorite_Colors']] # 按最长列表长度对齐,缺失值补None for child, color in zip_longest(child_list, color_list): processed_data.append({'Name': name, 'Child': child, 'Color': color}) # 生成长格式DataFrame,None自动转为NaN df = pd.DataFrame(processed_data) print(df)
实现逻辑
- 遍历原始字典列表中的每个元素,提取顶层
Name; - 分别从
Children和Favorite_Colors列表中取出所有对应字段的值,形成两个独立列表; - 用
zip_longest按最长列表的长度对齐两个列表,缺失位置填充None; - 将每组
(Name, Child, Color)存入列表,传入pd.DataFrame后,None会自动转为NaN,得到包含所有数据的长格式结果。
内容的提问来源于stack exchange,提问作者Jeb
相关产品推荐
相关产品推荐

