将DataFrame中每条记录以字典表示和将其指定两列转成字典

将DataFrame映射成字典形式

在我们日常工作学习中难免遇到将DataFrame映射成字典的时候,下面就让我们来看看怎么操作。

假设我们现在有一些学生的数据,其中有姓名,年纪,专业信息。

import pandas as pd

data ={
    'name':['Tom','Jarry','Marry','Ali'],
    'age':[18,20,21,21],
    'major':['Math','English','Physics','Math']
}
df1 = pd.DataFrame(data)
print(df1)

    name  age    major
0    Tom   18     Math
1  Jarry   20  English
2  Marry   21  Physics
3    Ali   21     Math

将每条记录转化为字典格式

现在我们想把他转换成字典格式的数据储存,把每一行的数据拿出来,每个学生的信息单独存储为一个字典,可以采用pandas自带df.to_dict(‘records’)
效果如下

data_dict = df1.to_dict(orient='records')
print(data_dict)

[{'name': 'Tom', 'age': 18, 'major': 'Math'}, {'name': 'Jarry', 'age': 20, 'major': 'English'}, {'name': 'Marry', 'age': 21, 'major': 'Physics'}, {'name': 'Ali', 'age': 21, 'major': 'Math'}]

每个学生的信息都被取了出来,并以一个字典格式保存。

将dataframe中特定两列以字典格式保存

现在我们只想要学生的姓名和专业,并且以 姓名-专业的字典形式保存。
先将想要转化成字典的两列信息取出来,并且将姓名作为索引。

data_dict =df1[["name", "major"]].set_index("name")
print(data_dict)
         major
name
Tom       Math
Jarry  English
Marry  Physics
Ali       Math

将其转化为字典格式

data_dict =df1[["name", "major"]].set_index("name").to_dict()
print(data_dict)
{'major': {'Tom': 'Math', 'Jarry': 'English', 'Marry': 'Physics', 'Ali': 'Math'}}

形成的是一个嵌套字典,通过键major,取出我们想要的信息。

data_dict =df1[["name", "major"]].set_index("name").to_dict()['major']
print(data_dict)
{'Tom': 'Math', 'Jarry': 'English', 'Marry': 'Physics', 'Ali': 'Math'}

如果我们想要查看选修每个专业的都有哪个学生的时候,以major作为索引。

data_dict =df1[["name", "major"]].set_index("major").to_dict()['name']
print(data_dict)
{'Math': 'Ali', 'English': 'Jarry', 'Physics': 'Marry'}

查看数学专业却发现只有ALi一个同学,那么这是为什么呢?

data_dict =df1[["name", "major"]].set_index("major")
print(data_dict)
data_dict =df1[["name", "major"]].set_index("major").to_dict()['name']
print(data_dict)
          name
major
Math       Tom
English  Jarry
Physics  Marry
Math       Ali
{'Math': 'Ali', 'English': 'Jarry', 'Physics': 'Marry'}

将major作为索引后形成的dataframe中,可以看到数学专业的有两名同学,但是再形成字典时,在形成math-Tom键值对之后,遇到Math-Ali这一行时,因为键是相同的,那么默认为对math键相应的值进行修改。
那么如果想要获得数学专业的同学时应该怎么做呢?
这时我们可以用到pandas中的groupby函数,对datafram进行分组,在分组之后再进行聚合。

df2 = df1.groupby('major')
for name, group in df2:
    print(name)
    print(group)

English
    name  age    major
1  Jarry   20  English
Math
  name  age major
0  Tom   18  Math
3  Ali   21  Math
Physics
    name  age    major
2  Marry   21  Physics

可以看到通过分组函数,我们将学生按照专业进行了分组。为了整合每个专业的学生名单还需要对其进行聚合。我们将每个专业的学生姓名转化为列表形式,最后再转为字典格式,从而达到目的。

df2 =df2['name'].apply(lambda x:x.tolist())
print(df2)
print(df2.to_dict())
major
English       [Jarry]
Math       [Tom, Ali]
Physics       [Marry]
Name: name, dtype: object
{'English': ['Jarry'], 'Math': ['Tom', 'Ali'], 'Physics': ['Marry']}

Original: https://blog.csdn.net/George_RED/article/details/114920289
Author: George_RED
Title: 将DataFrame中每条记录以字典表示和将其指定两列转成字典

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754560/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 分布式 –爬虫

    定义 使用多台机器共享一个请求队列,同时爬取一个项目,且不重复抓取。 场景: 需要大量的数据 需多台服务器 一定的带宽 用途:1.爬虫工程师2.后端开发、数据分析、机器学习等的附加…

    Python 2023年10月7日
    045
  • 个人记录:对于python学习的反思和总结(一)

    这个函数有一些问题,但我们首先翻译和写我们想到的,然后解决我们最终调整优化程序时没有想到的问题。 [En] There are some problems with this fu…

    Python 2023年5月25日
    091
  • 【机器学习】数据准备–python爬虫

    前言 我们在学习机器学习相关内容时,一般是不需要我们自己去爬取数据的,因为很多的算法学习很友好的帮助我们打包好了相关数据,但是这并不代表我们不需要进行学习和了解相关知识。在这里我们…

    Python 2023年11月2日
    041
  • 【编程实践/嵌入式比赛】嵌入式比赛学习记录(一):TCP服务器和web界面的建立

    0. 前言 最近找同学参加了嵌入式比赛,为了让自己的简历不显得一穷二白,可惜我本人是计算机专业的学生,因此大部分的工作是上位机开发,可能也会搞一下WIFI模块。由于在此过程中还是学…

    Python 2023年8月10日
    070
  • networkx绘制度分布

    networkx绘制度分布 d = nx.degree(g1) print("网络的度分布为:{}".format(d)) d = nx.degree(g1) …

    Python 2023年9月1日
    051
  • 手把手教你:基于粒子群优化算法(PSO)优化卷积神经网络(CNN)的文本分类

    系列文章 手把手教你:人脸识别考勤系统 @ 系列文章 项目简介 一、粒子群算法(PSO)简介 二、项目展示 二、环境需求 环境安装实例 三、重要功能模块介绍 1.数据预处理模块(d…

    Python 2023年6月10日
    095
  • 使用NumPy统计函数对振幅进行分析

    1、振幅 在证券市场中,振幅是指某投资品种在一定时期中的最低价与最高价之间的振荡幅度,它在一定程度上表现该投资品种的活跃程度。如果一只股票的振幅较小,说明该股不够活跃,反之则说明该…

    Python 2023年8月30日
    061
  • radio插件

    csharp;gutter:true; <em>, </em>:after, *:before { box-sizing: border-box; }&lt…

    Python 2023年6月10日
    047
  • NumPy基础及取值操作 educoder头歌实践作业

    任务描述 本关任务:根据本关所学知识,补全右侧代码编辑器中缺失的代码,完成程序的编写并通过所有测试用例。 相关知识 为了完成本关任务,你需要掌握: 怎样安装 NumPy; 什么是 …

    Python 2023年8月23日
    039
  • python读取nc数据并绘图

    使用python读取nc数据并绘图 * – 获取nc数据的相关信息 – 绘图 – + 用matplotlib绘图 + 用Basemap绘图 + …

    Python 2023年8月2日
    049
  • Flask安装

    虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv: virtualenv –version 安装虚拟环境和虚拟环境wrapper(这里用的ubun…

    Python 2023年8月13日
    038
  • 数据分析(3)数据重构

    task3——数据重构 学习参考资料:datawhale动手学数据分析 学习链接:https://github.com/datawhalechina/hands-on-data-a…

    Python 2023年8月20日
    036
  • 《黑客帝国》中的代码雨让人身临其境 利用Python轻松实现

    ; 前言 《黑客帝国》的一段代码雨片段让外行人感觉非常震撼,但其实利用咱们的Python来做出这个效果真的很简单! 今天就带大家把这个代码雨放在自己的显示器上面,亲身体验一把黑客的…

    Python 2023年9月19日
    054
  • 【Python百日基础系列】Day14 – Pandas 文本数据处理及匿名函数和映射函数

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年8月9日
    069
  • Pytorch入门教程

    👨‍💻 作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享, 公众号:GoAI的学习小屋,免费分享书籍、简历、导图等资料,更有…

    Python 2023年7月31日
    048
  • sanic/flask + openpyxl 实现excel文件上传解析

    介绍 openpyxl的基本使用和web应用中前端上传文件,后端(sanic)解析存入数据库。 1 openpyxl 简单使用 openpyxl是用于读取/写入excel 文件的P…

    Python 2023年8月10日
    044
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球