0

0

从Pandas DataFrame创建嵌套字典的实用指南

DDD

DDD

发布时间:2025-10-18 14:30:02

|

802人浏览过

|

来源于php中文网

原创

从Pandas DataFrame创建嵌套字典的实用指南

本文详细介绍了如何将pandas dataframe中的扁平化数据转换为多层嵌套字典结构。通过利用`pandas.dataframe.pivot`方法,您可以高效地将表格数据重塑为以指定列作为外层和内层键,以另一列作为值的字典。教程将涵盖具体实现步骤、示例代码,并提供关键注意事项,帮助您在数据处理中实现更灵活的数据访问和管理。

在数据分析和处理中,我们经常需要将表格形式的数据(如Pandas DataFrame)转换为更具层次感的结构,例如嵌套字典。这种转换对于通过多级键快速查找特定值非常有用。本文将演示如何利用Pandas库的强大功能,将一个包含团队、指标类型和百分比的扁平DataFrame转换为一个以团队名为第一层键、指标类型为第二层键、百分比为最终值的嵌套字典。

原始数据结构与目标

假设我们有一个Pandas DataFrame,其结构如下:

Team X or Y Percentage
A X 80%
A Y 20%
B X 70%
B Y 30%
C X 60%
C Y 40%

我们希望将其转换为以下形式的嵌套字典:

{'A': {'X': '80%', 'Y': '20%'},
 'B': {'X': '70%', 'Y': '30%'},
 'C': {'X': '60%', 'Y': '40%'}}

这种结构允许我们通过 dictionary['Team']['X or Y'] 的方式直接获取相应的百分比。

挑战与常见误区

初学者在尝试创建此类嵌套字典时,可能会尝试使用 dict(zip(list1, dict(zip(list2, list3)))) 这样的方法。然而,这种方法通常会失败,因为Python字典的键必须是唯一的。在我们的例子中,如果直接将 X or Y 列作为键创建内层字典,或者将 Team 列作为键创建外层字典,当这些列中的值在不同的行中重复时,后续的同名键会覆盖之前的键,导致数据丢失。例如,'X' 和 'Y' 在多个团队中都存在,直接 zip 无法正确处理这种多对多的关系。

解决方案:使用 pandas.DataFrame.pivot

Pandas提供了一个名为 pivot 的强大方法,专门用于重塑DataFrame。它可以将指定列的值转换为新的列名,从而实现数据的透视。结合 to_dict() 方法,我们可以优雅地解决这个问题。

1. 创建示例DataFrame

首先,让我们创建上述的DataFrame:

import pandas as pd

data = {
    'Team': ['A', 'A', 'B', 'B', 'C', 'C'],
    'X or Y': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Percentage': ['80%', '20%', '70%', '30%', '60%', '40%']
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)

输出:

原始DataFrame:
  Team X or Y Percentage
0    A      X        80%
1    A      Y        20%
2    B      X        70%
3    B      Y        30%
4    C      X        60%
5    C      Y        40%

2. 应用 pivot 方法

pivot 方法接受三个主要参数:

奇布塔
奇布塔

基于AI生成技术的一站式有声绘本创作平台

下载
  • index: 用于生成新的DataFrame的行索引的列名。
  • columns: 用于生成新的DataFrame的列索引的列名。
  • values: 用于填充新的DataFrame的值的列名。

在我们的场景中:

  • 我们希望最终字典的第一层键是 Team,因此 Team 将作为 columns 参数。
  • 我们希望最终字典的第二层键是 X or Y,因此 X or Y 将作为 index 参数。
  • 我们希望最终字典的值是 Percentage,因此 Percentage 将作为 values 参数。
# 使用pivot重塑DataFrame
pivot_df = df.pivot(index='X or Y', columns='Team', values='Percentage')
print("\n重塑后的DataFrame (pivot结果):")
print(pivot_df)

输出:

重塑后的DataFrame (pivot结果):
Team     A    B    C
X or Y
X      80%  70%  60%
Y      20%  30%  40%

请注意,pivot 的默认行为是将 columns 参数指定的列作为新DataFrame的列,index 参数指定的列作为新DataFrame的行。

3. 转换为嵌套字典

重塑后的 pivot_df 已经非常接近我们想要的结构。现在,我们只需要调用其 to_dict() 方法即可。to_dict() 方法默认会将DataFrame转换为以列名为外层键,行索引为内层键的嵌套字典。

# 将重塑后的DataFrame转换为嵌套字典
nested_dict = pivot_df.to_dict()
print("\n最终生成的嵌套字典:")
print(nested_dict)

输出:

最终生成的嵌套字典:
{'A': {'X': '80%', 'Y': '20%'}, 'B': {'X': '70%', 'Y': '30%'}, 'C': {'X': '60%', 'Y': '40%'}}

这正是我们期望的输出结果。

注意事项

  1. 唯一性要求: pivot 方法要求 index 和 columns 参数组合出的每个单元格必须是唯一的。如果存在相同的 index 和 columns 组合,例如同一个 Team 有多行相同的 X or Y 值,pivot 会抛出 ValueError: Index contains duplicate entries, cannot reshape 错误。
  2. pivot_table 的使用: 如果你的数据中存在重复的 index 和 columns 组合,并且你需要对这些重复值进行聚合(如求和、平均值等),那么应该使用 pandas.DataFrame.pivot_table 方法。pivot_table 提供了 aggfunc 参数来指定聚合函数
    # 示例:如果数据有重复,需要聚合
    # df_with_duplicates.pivot_table(index='X or Y', columns='Team', values='Percentage', aggfunc='first').to_dict()
  3. 数据类型: 在本例中,Percentage 列的值是字符串(如 '80%')。如果它们是数值类型(如 0.80),pivot 同样适用,并且在转换为字典后,值会保持其数值类型。根据需要,你可能需要在数据加载或转换前进行类型转换。
  4. NaN值: 如果在 pivot 过程中,某个 index 和 columns 的组合没有对应的值,结果DataFrame中会填充 NaN。to_dict() 转换后,这些 NaN 值也会保留在字典中,可能需要进一步处理(如过滤掉 NaN 或替换为默认值)。

总结

通过 pandas.DataFrame.pivot 结合 to_dict() 方法,我们可以高效、准确地将扁平化的表格数据转换为层次清晰的嵌套字典。这种方法不仅代码简洁,而且能够优雅地处理多级键的映射关系,是Pandas数据处理中一项非常实用的技巧。理解 pivot 的工作原理及其与 pivot_table 的区别,将有助于你在更复杂的数据重塑场景中游刃有余。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1365

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

569

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

730

2023.08.11

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 13.9万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

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

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