如何将层级字典转换为Pandas DataFrame(电池层级数据场景)
将层级字典转换为Pandas DataFrame的方法
需求背景
需要将对应以下层级关系的嵌套字典转换为Pandas DataFrame,每一行对应一个电芯,包含其所属的城市、车辆、Pack、模块及电芯ID:
delhi = 10 vehicle 1 vehicle = 1 battery 1 battery = 4 packs a pack = 2 modules 1 module = 104 cells
示例与完整字典结构
示例字典
tempdict = { 'vehicle1':[ {'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]} ] }
完整字典
import itertools listone = ['pack' ] listtwo = ["{0}".format(i) for i in range(1,105)] pack104 = list(''.join(e) for e in itertools.product(listone, listtwo)) data_dict = {'delhi': [{'vehicle1':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle2':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle3':[{'pack1':[{'module1':pack104}, {'module2':pack104}]},{ 'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle4':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle5':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle6':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle7':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle8':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle9':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}, {'vehicle10':[{'pack1':[{'module1':pack104}, {'module2':pack104}]}, {'pack2':[{'module1':pack104}, {'module2':pack104}]}, {'pack3':[{'module1':pack104}, {'module2':pack104}]}, {'pack4':[{'module1':pack104}, {'module2':pack104}]}]}]}
转换方法
通过多层循环遍历嵌套字典的每一层,收集每个电芯的完整层级信息,再转换为DataFrame:
import pandas as pd # 初始化空列表存储每条电芯记录 records = [] # 遍历层级结构 for city, vehicles in data_dict.items(): for vehicle_item in vehicles: for vehicle_name, packs in vehicle_item.items(): for pack_item in packs: for pack_name, modules in pack_item.items(): for module_item in modules: for module_name, cells in module_item.items(): for cell_id in cells: records.append({ '城市': city, '车辆': vehicle_name, 'Pack': pack_name, '模块': module_name, '电芯ID': cell_id }) # 转换为DataFrame df = pd.DataFrame(records) # 验证结果(可选) print(df.head())
说明
- 这段代码逐层遍历嵌套字典,将每个电芯的所属城市、车辆、Pack、模块及自身ID存入字典,再统一存入列表
records - 最终用
pd.DataFrame()将列表转换为结构化的DataFrame,每一行对应一个电芯的完整归属信息
内容的提问来源于stack exchange,提问作者Sachin Shinde
相关产品推荐
相关产品推荐

