0

0

将嵌套字典(三层)转换为带多级列索引的Pandas表格

霞舞

霞舞

发布时间:2026-01-25 20:57:08

|

526人浏览过

|

来源于php中文网

原创

将嵌套字典(三层)转换为带多级列索引的Pandas表格

本文介绍如何将形如 `{block: {text: {key: value}}}` 的三层嵌套字典高效转换为具有多级列索引(multiindex columns)的pandas dataframe,实现结构化表格展示,适用于配置解析、实验结果汇总等场景。

要将深度为三层的嵌套字典(block → text → key)转化为直观、可读性强的表格形式(如 block 为行索引,text 为一级列名,key 为二级列名),核心在于重塑数据结构以匹配 MultiIndex 列布局。直接使用 pd.DataFrame(data) 会因内层字典不统一而生成 object 类型列,无法满足分层展示需求。

推荐采用“转置 + 展平 + 拼接 + 列索引重建”的四步策略:

  1. 转置原始 DataFrame:df.T 将 block 从键变为行索引,使各 text(如 "text1"、"text2")成为列名,便于后续按列处理;
  2. 逐列展平内层字典:对每一列(即每个 text),使用 pd.json_normalize() 将其对应的字典(如 {"key1": "value1", "key2": "value2"})展开为独立列;
  3. 水平拼接展平结果:用 pd.concat(..., axis=1) 将各 text 对应的扁平 DataFrame 横向合并;
  4. 构建多级列索引:通过 pd.MultiIndex.from_product() 显式定义列层级——第一级为 text 名(原列名),第二级为 key 名(如 "key1", "key2"),确保语义清晰且支持 .xs() 等高级索引操作。

完整代码如下:

import pandas as pd

data = {
    "block1": {
        "text1": {"key1": "value1", "key2": "value2"},
        "text2": {"key1": "value3", "key2": "value4"},
    },
    "block2": {
        "text1": {"key1": "value5", "key2": "value6"},
        "text2": {"key1": "value7", "key2": "value8"},
    },
}

# 步骤1:构建初始DataFrame并转置
df = pd.DataFrame(data).T

# 步骤2+3:对每列展平并水平拼接
flattened_cols = [pd.json_normalize(df[col]) for col in df.columns]
new_df = pd.concat(flattened_cols, axis=1).set_index(df.index)

# 步骤4:设置多级列索引(text → key)
keys = ["key1", "key2"]  # 假设所有text下key结构一致;若不一致,建议先校验
new_df.columns = pd.MultiIndex.from_product([df.columns, keys], names=["text", "key"])

print(new_df)

输出效果:

DubbingX智声云配
DubbingX智声云配

多情绪免费克隆AI音频工具

下载
text   text1           text2        
key     key1    key2    key1    key2
block1 value1  value2  value3  value4
block2 value5  value6  value7  value8

注意事项

  • json_normalize() 要求各 text 下的子字典具有完全一致的键集合;若存在缺失键(如某 text2 缺少 "key2"),需预先填充默认值(如用 pd.json_normalize(df[col], errors='ignore') 或手动补全);
  • 列名层级可通过 names=["text", "key"] 显式命名,提升可读性与后续分组操作便利性;
  • 若原始嵌套更深(如四层),可递归展平或改用 pd.json_normalize(data, sep='_') 配合正则重命名列。

该方法兼顾简洁性与可扩展性,是处理规则化嵌套配置数据的标准实践。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

54

2025.12.04

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

536

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

24

2026.01.06

c++ 根号
c++ 根号

本专题整合了c++根号相关教程,阅读专题下面的文章了解更多详细内容。

63

2026.01.23

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

60

2026.01.23

yy漫画官方登录入口地址合集
yy漫画官方登录入口地址合集

本专题整合了yy漫画入口相关合集,阅读专题下面的文章了解更多详细内容。

238

2026.01.23

漫蛙最新入口地址汇总2026
漫蛙最新入口地址汇总2026

本专题整合了漫蛙最新入口地址大全,阅读专题下面的文章了解更多详细内容。

400

2026.01.23

C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

17

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.5万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号