讲师中心 微信公众号
AI工具推荐 视频效率加速

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

胖丽姑娘_2376

胖丽姑娘_2376

发布时间:2026-01-25 21:10:02

|

484人浏览过

|

来源于php中文网

原创

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

本文介绍如何将三层嵌套字典(block → text → key)高效转换为结构清晰的pandas dataframe,通过转置、`json_normalize`、`concat`与`multiindex.from_product`组合实现自动化的多级列构建。

在实际数据处理中,我们常遇到类似 {"block1": {"text1": {"key1": "v1", "key2": "v2"}, ...}} 这样的三层嵌套字典结构,目标是将其展平为具备语义化层级的表格:行索引为 block 名(如 "block1"),一级列名为 text 标签(如 "text1"),二级列名为原始键名(如 "key1")。这本质上是构建一个具有 MultiIndex 列 的 DataFrame。

以下为完整、可复现的解决方案:

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",
        },
    },
}

# Step 1: 初始化基础 DataFrame(按 block 为列)
df = pd.DataFrame(data)

# Step 2: 转置 → block 变为行索引,text 变为列名
df_t = df.T  # shape: (2, 2), index=['block1','block2'], columns=['text1','text2']

# Step 3: 对每一列(即每个 text)用 json_normalize 展开其内部字典
# 每个 textX 列对应一个 dict → json_normalize 生成单列 DataFrame(key1/key2 为列)
normalized_parts = [pd.json_normalize(df_t[col]) for col in df_t.columns]

# Step 4: 水平拼接所有展开结果,并设置行索引对齐原 df_t.index
new_df = pd.concat(normalized_parts, axis=1).set_index(df_t.index)

# Step 5: 构建 MultiIndex 列:外层为 text 名,内层为 key 名(需预先确定键名)
# 注意:此处假设所有 text 下的键结构一致;若不一致,建议先统一提取 keys = list(data["block1"]["text1"].keys())
keys = ["key1", "key2"]
new_df.columns = pd.MultiIndex.from_product([df_t.columns, keys], names=["text", "key"])

print(new_df)

输出结果如下(已自动对齐并支持分层访问):

Miller CSV TSV JSON 数据处理器
Miller CSV TSV JSON 数据处理器

Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。

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

✅ 关键说明与注意事项:

  • json_normalize 是处理嵌套字典的利器,它能将 {"key1":"v1","key2":"v2"} 直接转为含两列的 DataFrame;
  • pd.concat(..., axis=1) 实现横向拼接,确保各 textX 部分并列;
  • set_index(df_t.index) 确保最终行索引与原始 block 顺序一致;
  • MultiIndex.from_product 要求明确知道所有子键(如 ["key1","key2"]),若键名动态变化,可统一提取:
    all_keys = sorted(set(k for block in data.values() for text in block.values() for k in text.keys()))
  • 若某 text 缺失某个 key,json_normalize 会自动填 NaN,保持列对齐。

该方法简洁、可扩展,适用于任意数量的 block 和 text,且天然支持 Pandas 的 .xs()、.loc[] 等多级索引操作,是构建结构化报表的理想选择。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

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

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

300

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

212

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

331

2026.04.13

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

446

2025.12.13

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

265

2026.05.13

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

40

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

40

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

20

2026.09.22

热门下载

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

精品课程

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

共101课时 | 20.6万人学习

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

共39课时 | 4.7万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn