当前位置: 首页 > news >正文

【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织

前言

在数据科学和数据分析领域,Pandas是一个备受喜爱的Python库。它提供了丰富的数据结构和灵活的工具,帮助我们高效地处理和分析数据。其中,索引在Pandas中扮演着关键角色,它是一种强大的数据组织和访问机制,使我们能够更好地理解和操作数据。

本博客将探讨Pandas中与索引相关的核心知识点和常用操作。我们将了解如何设置和重置索引,通过索引来选择和过滤数据,以及如何利用多级索引来处理复杂的层次结构数据。


索引

当涉及Python或Pandas库中的索引时,通常指的是Pandas库中的DataFrame和Series对象的索引。这里只简单介绍一下索引,索引的具体用法均在其他操作中

案例数据表university_rank.csv

在这里插入图片描述

索引的设置

我们可以在读入数据的时候就通过pd.read_csv相关属性来设置索引列,可以是单列也可以是多列,需要用列表来表达

读取时设置索引

pd.read_csv(# 设置索引列index_col = [].........
)

In[0]:

df = pd.read_csv("university_rank.csv", index_col=["大学名称"])
df

out[0]:

排名地区学科领域排名依据
大学名称
哈佛大学1北美工程学术声誉
牛津大学2欧洲医学科研产出
北京大学3亚洲商学国际影响力
悉尼大学4大洋洲计算机科学教学质量
圣保罗大学5南美艺术学生满意度
...............
圣保罗国立大学96南美计算机科学研究生录取率
约翰内斯堡大学97非洲环境科学学术声誉
麦吉尔大学98北美艺术学生满意度
伦敦政治经济学院99欧洲法律国际影响力
东京大学100亚洲教育毕业生就业率

100 rows × 4 columns

如果我想要设置多个变量列作为索引呢?

In[1]:

df = pd.read_csv("university_rank.csv", index_col=["地区", "学科领域"]) # 设置多个变量列作为索引
df

out[1]:

大学名称排名排名依据
地区学科领域
北美工程哈佛大学1学术声誉
欧洲医学牛津大学2科研产出
亚洲商学北京大学3国际影响力
大洋洲计算机科学悉尼大学4教学质量
南美艺术圣保罗大学5学生满意度
............
计算机科学圣保罗国立大学96研究生录取率
非洲环境科学约翰内斯堡大学97学术声誉
北美艺术麦吉尔大学98学生满意度
欧洲法律伦敦政治经济学院99国际影响力
亚洲教育东京大学100毕业生就业率

100 rows × 3 columns

DataFrame.set_index方法设置索引

除此之外也可以使用DataFrame类型数据自带的df.set_index方法

df.set_index(# 索引列名,需要使用list类型key# 建立索引后是否删除该列drop = True# 是否在原索引上添加索引append = False# 是否直接修改原dfinplace = False# 默认为False,如果为True,则检查新的索引是否唯一,如果有重复则会抛出ValueErrorverify_integrity = False
)

In[2]:

df = pd.read_csv("university_rank.csv")
df.set_index(keys=["排名"], append=True, inplace=True)
print(type(df)) # 查看df类型
df

out[2]:

<class 'pandas.core.frame.DataFrame'>
大学名称地区学科领域排名依据
排名
01哈佛大学北美工程学术声誉
12牛津大学欧洲医学科研产出
23北京大学亚洲商学国际影响力
34悉尼大学大洋洲计算机科学教学质量
45圣保罗大学南美艺术学生满意度
..................
9596圣保罗国立大学南美计算机科学研究生录取率
9697约翰内斯堡大学非洲环境科学学术声誉
9798麦吉尔大学北美艺术学生满意度
9899伦敦政治经济学院欧洲法律国际影响力
99100东京大学亚洲教育毕业生就业率

100 rows × 4 columns

上面这个例子就很明显的看出来append参数的作用,本来该DataFrame就有一个流水索引,后面又添加了一个排名索引并且append参数为True
但是我们发现打印出来是100 row * 4 columns所以排名变成索引后就不在作为一个列来存在了,我们可以使用drop参数来改变它

In[3]:

df = pd.read_csv("university_rank.csv")
df.set_index(keys=["排名"], append=True, inplace=True, drop=False) # 调整drop参数
df

out[3]:

大学名称排名地区学科领域排名依据
排名
01哈佛大学1北美工程学术声誉
12牛津大学2欧洲医学科研产出
23北京大学3亚洲商学国际影响力
34悉尼大学4大洋洲计算机科学教学质量
45圣保罗大学5南美艺术学生满意度
.....................
9596圣保罗国立大学96南美计算机科学研究生录取率
9697约翰内斯堡大学97非洲环境科学学术声誉
9798麦吉尔大学98北美艺术学生满意度
9899伦敦政治经济学院99欧洲法律国际影响力
99100东京大学100亚洲教育毕业生就业率

100 rows × 5 columns

取消set_index索引设置

那么我们该如何还原呢,答案就是使用df.reset_index

df.reset_index()是Pandas DataFrame对象的一个方法,它用于重置(恢复)DataFrame的索引,将整数序列作为新的行索引,并将原来的行索引(可能是整数、字符串或其他类型)转换为DataFrame的列。

df.reset_index(# 是否将索引列删除,而不还原drop = Flase# 是否修改原dfinplace = False#  可选参数,用于指定要重置的索引级别。如果不指定,则会重置所有的索引级别level# 如果DataFrame具有多级列索引,该参数用于指定要重置的列级别。默认为0,即第一级col_level# 如果指定了col_level,则可以使用该参数为重置的列索引命名col_fill
)

In[4]:

df.reset_index(drop=True, inplace=True)
df
大学名称排名地区学科领域排名依据
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度
..................
95圣保罗国立大学96南美计算机科学研究生录取率
96约翰内斯堡大学97非洲环境科学学术声誉
97麦吉尔大学98北美艺术学生满意度
98伦敦政治经济学院99欧洲法律国际影响力
99东京大学100亚洲教育毕业生就业率

100 rows × 5 columns

DataFrame.index.name修改索引名称

此外我们也可以使用df.index.names来修改索引的名称

In[5]:

df.index.names = ["ID"] # df是案例数据表,设置索引名称为ID
df

out[5]:

大学名称排名地区学科领域排名依据
ID
0哈佛大学1北美工程学术声誉
1牛津大学2欧洲医学科研产出
2北京大学3亚洲商学国际影响力
3悉尼大学4大洋洲计算机科学教学质量
4圣保罗大学5南美艺术学生满意度
..................
95圣保罗国立大学96南美计算机科学研究生录取率
96约翰内斯堡大学97非洲环境科学学术声誉
97麦吉尔大学98北美艺术学生满意度
98伦敦政治经济学院99欧洲法律国际影响力
99东京大学100亚洲教育毕业生就业率

100 rows × 5 columns


索引的排序

建立完索引后我们可以根据索引来进行排序,具体使用的方法是df.sort_index()

DataFrame.sort_index索引排序

df.sort_index()是Pandas DataFrame对象的一个方法,用于按照索引(行标签)对DataFrame进行排序。它可以根据行索引的标签值进行升序或降序排序。

df.sort_index(# 多重索引时的优先级level# 是否为升序ascending = True# 是否在原df修改inplace = False# 缺失值的排列顺序,可选值有 'first' 和 'last',默认为 'last',表示NaN在排序后放在最后。na_position = 'last'# 是否按索引排序后丢弃索引,默认为False,如果为True,则在排序后重置行索引为从0开始的连续整数索引ignore_index = False# 默认为0,表示按照行索引排序。如果设置为1,则按列索引排序(对于多级索引的DataFrame)axis = 0# 排序算法的种类。可选值有 'quicksort'、'mergesort'、'heapsort',默认为 'quicksort'kind = 'quicksort'# 默认为True,如果在排序时有未指定的级别或索引,则对其进行排序。如果设置为False,则保持原样sort_remaining = True# 1.1.0新增属性,可以对索引值进行函数修改key
)

In[6]:

df = pd.read_csv("university_rank.csv", index_col=["学科领域", "地区"])
df

out[6]:

大学名称排名排名依据
学科领域地区
工程北美哈佛大学1学术声誉
医学欧洲牛津大学2科研产出
商学亚洲北京大学3国际影响力
计算机科学大洋洲悉尼大学4教学质量
艺术南美圣保罗大学5学生满意度
...............
计算机科学南美圣保罗国立大学96研究生录取率
环境科学非洲约翰内斯堡大学97学术声誉
艺术北美麦吉尔大学98学生满意度
法律欧洲伦敦政治经济学院99国际影响力
教育亚洲东京大学100毕业生就业率

100 rows × 3 columns

In[7]:

df.sort_index()

out[7]:

大学名称排名排名依据
学科领域地区
医学亚洲清华大学34学术声誉
亚洲清华大学54教学质量
亚洲清华大学74教学质量
亚洲清华大学94教学质量
北美麦吉尔大学28教学质量
...............
计算机科学南美里约热内卢大学86研究生录取率
南美圣保罗国立大学96研究生录取率
大洋洲悉尼大学4教学质量
大洋洲墨尔本大学14学术声誉
大洋洲奥克兰大学24教学质量

100 rows × 3 columns

In[8]:

df.sort_index(level="地区")

out[8]:

大学名称排名排名依据
学科领域地区
医学亚洲清华大学34学术声誉
亚洲清华大学54教学质量
亚洲清华大学74教学质量
亚洲清华大学94教学质量
商学亚洲北京大学3国际影响力
...............
环境科学非洲约翰内斯堡大学57学术声誉
非洲约翰内斯堡大学67学术声誉
非洲约翰内斯堡大学77学术声誉
非洲约翰内斯堡大学87学术声誉
非洲约翰内斯堡大学97学术声誉

100 rows × 3 columns

In[9]:

df.sort_index(level="地区", ignore_index=True)

out[9]:

大学名称排名排名依据
0清华大学34学术声誉
1清华大学54教学质量
2清华大学74教学质量
3清华大学94教学质量
4北京大学3国际影响力
............
95约翰内斯堡大学57学术声誉
96约翰内斯堡大学67学术声誉
97约翰内斯堡大学77学术声誉
98约翰内斯堡大学87学术声誉
99约翰内斯堡大学97学术声誉

100 rows × 3 columns

DataFrame.sort_values变量列排序

如果我想要按照变量来排序呢,而不是索引?df.sort_values可以帮到你

df.sort_values(# 用于指定排序的列名或列名列表。可以传入单个列名的字符串,也可以传入一个包含多个列名的列表,表示按照这些列的值进行排序by# 默认为0,表示按照行进行排序。如果设置为1,则按列进行排序axis = 0# 默认为True,表示升序排序。如果设置为False,表示降序排序ascending = True# 默认为False,是否在原df上修改inplace = False# 指定缺失值(NaN)在排序后的位置。可选值有 'first' 和 'last',默认为 'last',表示NaN在排序后放在最后na_position = 'last'# 默认为False,如果为True,则在排序后重置行索引为从0开始的连续整数索引ignore_index = False
)

In[10]:

data = {'ID': [4, 2, 1, 3],'Name': ['David', 'Bob', 'Alice', 'Charlie'],'Age': [40, 30, 25, 35]
}df = pd.DataFrame(data)
print(df)

out[10]:

   ID     Name  Age
2   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
0   4    David   40

现在,我们按照’Age’列进行升序排序

In[11]:

df_sorted = df.sort_values(by='Age')
print(df_sorted)

out[11]:

   ID     Name  Age
2   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
0   4    David   40

结束语

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

相关文章:

【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织

前言 在数据科学和数据分析领域&#xff0c;Pandas是一个备受喜爱的Python库。它提供了丰富的数据结构和灵活的工具&#xff0c;帮助我们高效地处理和分析数据。其中&#xff0c;索引在Pandas中扮演着关键角色&#xff0c;它是一种强大的数据组织和访问机制&#xff0c;使我们…...

matlab进阶:求解在约束条件下的多元目标函数最值(fmincon函数详解)

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…...

Kotlin知识点

Kotlin 是 Google 推荐的用于创建新 Android 应用的语言。使用 Kotlin&#xff0c;可以花更短的时间编写出更好的 Android 应用。 基础 Kotlin 程序必须具有主函数&#xff0c;这是 Kotlin 编译器在代码中开始编译的特定位置。主函数是程序的入口点&#xff0c;或者说是起点。…...

亚马逊云科技联合霞光社发布《2013~2023中国企业全球化发展报告》

中国企业正处于全球聚光灯下。当企业全球化成为时代发展下的必然趋势&#xff0c;出海也从“可选项”变为“必选项”。中国急速扩大的经济规模&#xff0c;不断升级的研发和制造能力&#xff0c;都在推动中国企业不断拓宽在全球各行业的疆域。 过去十年&#xff0c;是中国企业…...

【解析excel】利用easyexcel解析excel

【解析excel】利用easyexcel解析excel POM监听类工具类测试类部分测试结果备注其他 EasyExcel Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&…...

JQuery操作单选按钮Radio和复选框checkbox

获取选中值&#xff1a; $(input:radio:checked).val()&#xff1b;$("input[typeradio]:checked").val();$("input[namerd]:checked").val();$("input[idrand_question]:checked").val();设置第一个Radio为选中值&#xff1a; $(input:radio:…...

7.28 作业 QT

手动完成服务器的实现&#xff0c;并具体程序要注释清楚: widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器类 #include <QTcpSocket> //客户端类 #include <QMessageBox> //对话框类 #include …...

HTML <pre> 标签

定义和用法 pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。 <pre> 标签的一个常见应用就是用来表示计算机的源代码。 可以导致段落断开的标签(例如标题、"><p> 和 标签"><a…...

查询结果元数据-MetaData对象、数据库工具类的封装、通过反射实现数据查询的封装

六、查询结果元数据-MetaData对象 七、数据库工具类的封装 1、PropertieUtil类 2、DbUtil类 3、DBHepler类 查询&#xff1a; 4、TestDb测试类&#xff1a; 更新&#xff1a; 1&#xff09;插入&#xff1a; 2&#xff09;修改&#xff1a; 3&#xff09;删除&#xff1a; 查…...

【Minio中间件】上传图片并Vue回显

流程&#xff1a; 目录 1.文件服务器Minio的安装 1.1 下载Minio安装后&#xff0c;新建1个data文件夹。并在该安装目录cmd 敲命令。注意不要进错目录。依次输入 1.2 登录Minio网页端 1.3 先建1个桶&#xff08;buckets&#xff09;&#xff0c;点击create a bucket 2. Spr…...

Jmeter配置不同业务请求比例,应对综合场景压测

需求&#xff1a; 每次向服务器发出请求时&#xff0c;先生成一个随机数&#xff0c;我们对随机数的取值划分若干个范围&#xff08;对应若干个业务请求&#xff09;&#xff0c;然后对随机数进行判断&#xff0c;当随机数落在某个范围内&#xff0c;就可以执行对应的请求。比…...

数学分析:流形的线性代数回顾

因为是线性的&#xff0c;所以可以把所有的系数都提取出去。这也是多重线性代数的性质。可以看成基本的各项自变量的乘法。 这里可以看到两个不同基向量下&#xff0c;他们的坐标转化关系。 引出了张量积&#xff0c;也就是前面提到的内容。 对偶空间的例子总是比较美好。 因为…...

前端请求后端接口返回错误码

1、如果 HTTP Code 是 2xx 范围内的&#xff0c;那通常表明请求已经成功处理&#xff0c;并且可以根据具体的 HTTP Code 进一步判断请求的处理结果。比如&#xff1a; HTTP Code 200 表明请求成功&#xff0c;并返回了请求资源&#xff1b;HTTP Code 204 表明请求成功&#xf…...

【Java Web】Nacos 介绍和安装教程

文章目录 1. Nacos 介绍1.1 Nacos 的定义1.2 Nacos 的主要功能1.2.1 服务注册与发现1.2.2 配置管理1.2.3 动态 DNS 服务1.2.4 服务和元数据管理 1.3 Nacos 的适用场景1.3.1 微服务架构1.3.2 动态配置管理1.3.3 多环境部署1.3.4 云原生应用 2. Nacos 的核心组件2.1 服务注册与发…...

web漏洞-java安全(41)

这个重点是讲关于java的代码审计&#xff0c;看这些漏洞是怎么在java代码里面产生的。 #Javaweb 代码分析-目录遍历安全问题 这个漏洞原因前面文章有&#xff0c;这次我们看看这个漏洞如何在代码中产生的&#xff0c;打开靶场 解题思路就是通过文件上传&#xff0c;上传文件…...

用CSS和HTML写一个水果库存静态页面

HTML代码&#xff1a; <!DOCTYPE html> <html> <head><link rel"stylesheet" type"text/css" href"styles.css"> </head> <body><header><h1>水果库存</h1></header><table>…...

【回眸】备考PMP考点汇总 三(距离考试还有20天)

目录 前言 【回眸】备考PMP考点汇总 三&#xff08;距离考试还有20天&#xff09; 29、管理质量 30、获取资源 31、建设团队 32、管理团队 33、管理沟通 34、实施风险应对 35、实施采购 36、管理相关方参与 37、监控项目工作&#xff08;10%&#xff09; 38、实施整…...

新房的收房验房注意事项

文章目录 流程注意事项准备检查材料手续整体结构验收水电检测门窗结构地面工程墙面工程顶面工程阳台厨房卫生间户外设施 流程注意事项 只要发现问题&#xff0c;不管大小&#xff0c;都要在相关文件或表格中记录下来&#xff0c;而不管开发商以及陪同的收房人员如何花言巧语。…...

ARM裸机-5

1、可编程器件的编程原理 1.1、电子器件的发展方向 模拟器件-->数字器件 ASIC-->可编程器件 1.2、可编程器件的特点 CPU在固定频率的时钟控制下节奏运行。 CPU可以通过总线读取外部存储设备中的二进制指令集&#xff0c;然后解码执行。 这些可以被CPU解码执行的二进制指…...

SpringCloud学习路线(11)——分布式搜索ElasticSeach场景使用

一、DSL查询文档 &#xff08;一&#xff09;DSL查询分类 ES提供了基于JSON的DSL来定义查询。 1、常见查询类型&#xff1a; 查询所有&#xff1a; 查询出所有的数据&#xff0c;例如&#xff0c;match_all全文检索&#xff08;full text&#xff09;查询&#xff1a; 利用…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...