当前位置:首页 >> 编程语言 >> 【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织,c730(python处理数据索引的常见方法)

【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织,c730(python处理数据索引的常见方法)

0evadmin 编程语言 1
文件名:【Python】数据分析+数据挖掘——探索Pandas中的索引与数据组织,c730 【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是案例数据表,设置索引名称为IDdf

out[5]:

大学名称排名地区学科领域排名依据ID0哈佛大学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 Age2 1 Alice 251 2 Bob 303 3 Charlie 350 4 David 40

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

In[11]:

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

out[11]:

ID Name Age2 1 Alice 251 2 Bob 303 3 Charlie 350 4 David 40
结束语

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

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接