如何将嵌套字典导出为DataFrame并展开最深层数据至Excel
嵌套字典展开为多列DataFrame的实现方案
需求说明
需要将包含角色基础信息与嵌套物品详情的字典列表,展开为每个物品条目对应独立列的DataFrame(无物品信息则留空),最终用于导出至Excel,适配RPG存档物品追踪程序的界面需求。
示例输入数据
data = [{ 'id': 1, 'name': 'A', 'class': '1', 'item_details': [ {'level': 1, 'item': 'item A', 'quantity': 5}, {'level': 3, 'item': 'item A', 'quantity': 5}, {'level': 3, 'item': 'item C', 'quantity': 5} ] }, { 'id': 2, 'name': 'B', 'class': '2', 'item_details': [ {'level': 1, 'item': 'item B', 'quantity': 2}, {'level': 2, 'item': 'item D', 'quantity': 10} ] }, { 'id': 3, 'name': 'B', 'class': '3' }]
实现代码
import pandas as pd flattened_data = [] for entry in data: # 提取角色基础信息(排除物品详情字段) base_info = {key: value for key, value in entry.items() if key != 'item_details'} # 获取物品详情列表,无则设为空列表 item_list = entry.get('item_details', []) # 遍历每个物品条目,按顺序生成带索引后缀的列 for index, item in enumerate(item_list, start=1): base_info[f'level_{index}'] = item['level'] base_info[f'item_{index}'] = item['item'] base_info[f'quantity_{index}'] = item['quantity'] flattened_data.append(base_info) # 转换为DataFrame并填充空值为空字符串 result_df = pd.DataFrame(flattened_data).fillna('') print(result_df)
输出结果
| id | name | class | level_1 | item_1 | quantity_1 | level_2 | item_2 | quantity_2 | level_3 | item_3 | quantity_3 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | A | 1 | 1 | item A | 5 | 3 | item A | 5 | 3 | item C | 5 |
| 2 | B | 2 | 1 | item B | 2 | 2 | item D | 10 | |||
| 3 | B | 3 |
代码说明
- 基础信息提取:从每个字典中分离出id、name、class等非嵌套字段,作为每行的基础数据。
- 物品条目展开:遍历每个角色的物品详情,按条目顺序生成带数字后缀的列名(如
level_1、item_2),将每个物品的属性值对应填入。 - 空值处理:转换为DataFrame后,用空字符串填充缺失的物品字段,符合Excel导出的格式要求。
内容的提问来源于stack exchange,提问作者John Reyner
相关产品推荐
相关产品推荐

