如何将迭代构建的嵌套字典转换为多级列DataFrame?
嵌套字典转多级列DataFrame
直接用pandas的json_normalize方法就能快速实现需求,步骤如下:
示例代码
先构造和你结构一致的嵌套字典(用示例数据替代省略号):
import pandas as pd # 匹配你结构的示例嵌套字典 d = { 'usa': { 'day': {'c1': 1, 'c2': 2, 'c3': 3}, 'night': {'c1': 4, 'c2': 5, 'c3': 6} }, 'jap': { 'day': {'c1': 7, 'c2': 8, 'c3': 9}, 'night': {'c1': 10, 'c2': 11, 'c3': 12} }, 'chi': { 'day': {'c1': 13, 'c2': 14, 'c3': 15}, 'night': {'c1': 16, 'c2': 17, 'c3': 18} } }
执行转换操作:
# 解析嵌套字典,将层级键转为带分隔符的列名 df = pd.json_normalize(d) # 将列名拆分为多级索引(第一级为day/night,第二级为c1/c2/c3) df.columns = pd.MultiIndex.from_tuples([col.split('.') for col in df.columns]) # 查看最终结果 print(df)
输出结果
执行后会得到符合要求的多级列DataFrame:
day night c1 c2 c3 c1 c2 c3 usa 1 2 3 4 5 6 jap 7 8 9 10 11 12 chi 13 14 15 16 17 18
替代方法:手动构造多级列结构
如果不想用json_normalize,也可以调整字典结构让pandas自动识别多级列:
# 重构数据结构,让每个二级键对应所有一级键的数值 structured_data = { ('day', 'c1'): {k: v['day']['c1'] for k, v in d.items()}, ('day', 'c2'): {k: v['day']['c2'] for k, v in d.items()}, ('day', 'c3'): {k: v['day']['c3'] for k, v in d.items()}, ('night', 'c1'): {k: v['night']['c1'] for k, v in d.items()}, ('night', 'c2'): {k: v['night']['c2'] for k, v in d.items()}, ('night', 'c3'): {k: v['night']['c3'] for k, v in d.items()} } df = pd.DataFrame(structured_data)
该方法也能生成完全一致的多级列DataFrame。
内容的提问来源于stack exchange,提问作者soo
相关产品推荐
相关产品推荐

