如何将嵌套字典转换为指定结构的pandas多层索引DataFrame?
实现方法:无需调整字典结构,直接转换为目标DataFrame
当然可行!完全不用修改你原有的嵌套字典结构,用Python的Pandas库就能轻松转换成你想要的格式,这里给你两种实用的方案:
方案一:手动展开(直观易懂,适合新手)
这种方法通过三层循环把嵌套字典里的每一组键值对提取出来,整理成列表后再创建DataFrame:
import pandas as pd # 你的原始嵌套字典 original_dict = {'Main1' : {'A1' : {'a1' : 0}, 'A2' : {'a2' : 15}, 'A3' : {'a3' : 22}, 'A4' : {'a4' : 130}}, 'Main2' : {'B1' : {'b1' : 150}, 'B2' : {'b2' : 30}, 'B3' : {'b3' : 1}}} # 初始化空列表用来存储扁平数据 flat_data = [] # 逐层遍历嵌套字典 for main_key, mid_level_dict in original_dict.items(): for mid_key, inner_level_dict in mid_level_dict.items(): for inner_key, value in inner_level_dict.items(): # 把每一组数据以列表形式加入flat_data flat_data.append([main_key, mid_key, inner_key, value]) # 创建DataFrame并指定列名 result_df = pd.DataFrame(flat_data, columns=['col1', 'col2', 'col3', 'col4']) print(result_df)
运行后就能得到你想要的表格格式,输出结果和你给出的示例完全一致。
方案二:用Pandas内置方法(简洁高效)
如果你想少写循环,可以利用Pandas的json_normalize和stack方法来自动展开多层嵌套:
import pandas as pd original_dict = {'Main1' : {'A1' : {'a1' : 0}, 'A2' : {'a2' : 15}, 'A3' : {'a3' : 22}, 'A4' : {'a4' : 130}}, 'Main2' : {'B1' : {'b1' : 150}, 'B2' : {'b2' : 30}, 'B3' : {'b3' : 1}}} # 先将嵌套字典转为多层索引的Series multi_level_series = pd.Series(pd.io.json.json_normalize(original_dict).stack().stack()) # 重置索引并设置列名 result_df = multi_level_series.reset_index() result_df.columns = ['col1', 'col2', 'col3', 'col4'] print(result_df)
这个方案本质是利用Pandas的多层索引特性自动展开嵌套结构,代码更简洁,处理大型字典时效率也更高。
两种方案都不需要修改你原有的字典结构,直接运行就能得到目标DataFrame~
内容的提问来源于stack exchange,提问作者MBB
相关产品推荐
相关产品推荐

