【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

结束语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity2D】角色动画的切换

动画状态转换 第一种方法是设置一个中间状态&#xff0c;从中间状态向其余各种状态切换&#xff0c;且各状态向其他状态需要设置参数 实现动作转移时右键点击Make Transition即可 实现动画转移需要设置条件 点击一种动画到另一种动画的线 &#xff0c;然后点击加号添加Condi…

玩转LaTeX(三)【数学公式(基础)、​矩阵、多行公式】

数学公式基础 导言区&#xff08;引包&#xff09; \usepackage{amsmath} %带星号的eqution 正文区 \begin{document}%数学公式初步 \section{简介} \LaTeX{}将排版内容分为文本模式和数学模式。文本模式用于普通文本排版&#xff0c;数学模式用于数学公式排版。 …

【字节三面】41. 缺失的第一个正数

41. 缺失的第一个正数 解题思路 在原数组上进行操作 如果数字是2 将其放在索引为1的位置上数字x 放在索引为x - 1的位置上对于长度为n的数组 其中没有出现的最小正整数只能在[1,n 1]引入如果1 - n 这些数都出现了 那么答案就是n 1如果都没有出现完全 那么答案就在[1,n]中没…

【LeetCode】206.反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

【LeetCode 热题 100】矩阵 专题(大多原地算法,需要一定思维)

解题思路 在 代码注释中&#xff01; 文章目录 73. 矩阵置零54. 螺旋矩阵48. 旋转图像240. 搜索二维矩阵 II 73. 矩阵置零 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {// 难点&#xff1a;原地算法// 直接复用 matrix 第一行 和 …

oracle,获取每日24*60,所有分钟数

前言&#xff1a; 为规范用户的时间录入&#xff0c;因此我们采用下拉的方式&#xff0c;让用户选择需要的时间&#xff0c;因此我们需要将一天24小时的时间拆分为类似00:00,00:01...23:00,23:01,23:59。因此我们需要生成24*601440行的下拉复选值。具体效果如下图所示。 思路 1…

libuv库学习笔记-processes

Processes libuv提供了相当多的子进程管理函数&#xff0c;并且是跨平台的&#xff0c;还允许使用stream&#xff0c;或者说pipe完成进程间通信。 在UNIX中有一个共识&#xff0c;就是进程只做一件事&#xff0c;并把它做好。因此&#xff0c;进程通常通过创建子进程来完成不…

微信小程序 background-image直接设置本地图片路径,编辑器正常显示,真机运行不显示解决方法

项目场景 微信小程序&#xff0c;设置background-image直接设置本地图片路径。 问题描述 编辑器正常显示&#xff0c;真机运行不显示 原因分析 background-image只能用网络url或者base64图片编码。 解决方案 1、将本地图片转为网络url后设置到background-image上 例如&…

nestjs+typeorm+mysql基本使用学习

初始化项目 安装依赖 npm i -g nest/cli 新建项目 nest new project-name 命令行创建 创建Controller&#xff1a;nest g co test 创建Module&#xff1a;nest g mo test 创建Service&#xff1a;nest g service test 请求创建 123123 接口文档swagger 安装依赖 npm…

【Golang 接口自动化03】 解析接口返回XML

目录 解析接口返回数据 定义结构体 解析函数&#xff1a; 测试 优化 资料获取方法 上一篇我们学习了怎么发送各种数据类型的http请求&#xff0c;这一篇我们来介绍怎么来解析接口返回的XML的数据。 解析接口返回数据 定义结构体 假设我们现在有一个接口返回的数据resp如…

❤ yarn 和npm 的使用

❤ yarn 和npm 的使用 yarn 版本1的使用 yarn 简介 Yarn是facebook发布的一款取代npm的包管理工具。 yarn特点&#xff1a; 1&#xff0c;速度超快。 Yarn 缓存了每个下载过的包&#xff0c;所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率&#xff0c;因…

C# 反射

反射的概念&#xff1a;C#通过类型&#xff08;Type&#xff09;来创建对象&#xff0c;调用对象中的方法&#xff0c;属性等信息&#xff1b;B超就是利用了反射原理将超声波打在人的肚子上&#xff0c;然后通过反射波进行体内器官的成员&#xff1b; 反射提供的类&#xff1a;…

【代理模式】了解篇:静态代理 动态代理~

目录 1、什么是代理模式&#xff1f; 2、静态代理 3、动态代理 3.1 JDK动态代理类 3.2 CGLIB动态代理类 4、JDK动态代理和CGLIB动态代理的区别&#xff1f; 1、什么是代理模式&#xff1f; 定义&#xff1a; 代理模式就是为其他对象提供一种代理以控制这个对象的访问。在某…

强引用和弱引用

什么是弱引用和强引用 强引用&#xff1a; JavaScript 中强引用&#xff1a;对象的引用在 JavaScript 中是强引用&#xff0c;也就是将一个引用对象通过变量或常量保存时&#xff0c;那么这个变量或常量就是强引用&#xff0c;这个对象就不会被回收。 弱引用&#xff1a; JavaS…

P1123 取数游戏(dfs,嘎嘎清晰)

1分析&#xff1a;这一题每个数是否选择会影响后面的选择情况&#xff0c;所以需要用一个数组来保存 所以状态为当前选到那个数&#xff0c;之前选的数的和以及之前每个数是否选了 之后直接搜索即可。尽管复杂度较高&#xff0c;但因为存在大量的不合法情况所以可以通过 时间复…

华为nat64配置

1.前期环境准备 环境拓扑 拓扑分为两个区域,左边为trust区域,使用IPv4地址互访,右边为untrust区域,使用IPv6地址互访 2.接口地址配置 pc1地址配置 pc2地址配置 FW接口配置 (1)首先进入防火墙配置界面 注:防火墙初始账号密码为user:admin,pwd:Admin@123,进入之后…

web攻击面试|网络渗透面试(三)

Web攻击大纲 常见Web攻击类型&#xff1a; SQL注入攻击&#xff1a;介绍SQL注入攻击的概念、原理和常见的攻击方式&#xff0c;如基于错误消息的注入、基于布尔盲注的注入等。解释攻击者如何利用SQL注入漏洞获取敏感信息或者对数据库进行恶意操作&#xff0c;并提供防御措施&a…

8.docker仓库

文章目录 Docker仓库本地私有仓库Docker HarborDocker harbor部署访问页面创建用户下载私有仓库镜像harbor同步 Docker仓库 本地私有仓库 ##先下载 registry 镜像docker pull registry##修改配置文件&#xff0c;在 daemon.json 文件中添加私有镜像仓库地址vim /etc/dock…

SQL-每日一题【1070. 产品销售分析 III】

题目 销售表 Sales&#xff1a; 产品表 Product&#xff1a; 编写一个 SQL 查询&#xff0c;选出每个销售产品 第一年 销售的 产品 id、年份、数量 和 价格。 结果表中的条目可以按 任意顺序 排列。 查询结果格式如下例所示&#xff1a; 示例 1&#xff1a; 解题思路 前置知…

【设计模式】 策略模式

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;让客户端代码和算法的具体实现解耦。这样&#xff0c;客户端可以根据不同的需求选择不同的算…