python数据分析基础—pandas中set_index()、reset_index()的使用

news/2024/7/8 3:30:48 标签: python, 数据分析, pandas

文章目录

  • 一、索引是什么?
  • 二、set_index()
  • 三、reset_index()


一、索引是什么?

在进行数据分析时,通常我们要根据业务情况进行数据筛选,要求筛选特定情况的行或列,这时就要根据数据类型(Series或者DataFrame)的索引情况对数据进行相应的行切片或者列索引的处理。
在Pandas中最常用的就是数据类型就是Series和DataFrame,它们的索引情况如下:

Series

  • 索引(index):对应是最左侧那一列。
  • 值(values):每一个索引的右侧对应一个值。

DataFrame有两种索引

  • 行索引(index):对应最左边的那一列。
  • 列索引(columns):对应最上面的那一横行。

关于DataFrame索引的具体使用方法可以参考:
python数据分析的基础知识—pandas中dataframe()使用目录下的DataFrame切片与索引

二、set_index()

功能:指定数据表中的某列或指定某个数组列表为DataFrame行索引

函数语法

DataFrame.set_index(keys, *, drop=True, append=False, inplace=False, verify_integrity=False)

参数说明

  • key:数据表中的某列/列标签列表/数组列表,需要设置为索引的列。
  • drop:删除用作新索引的列,默认为True,删除。
  • append:是否将列附加到现有索引,默认为False,否。
  • inplace:表示当前操作是否对原数据重新,默认为False,否。
  • verify_integrity:检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为False,将提高该方法的性能,默认为False。

举例
模拟样本数据

python">import pandas as pd 
import numpy as np
data=pd.DataFrame({'A':['apple','orange','grape','pear'],
				   'B':[1000,2300,4000,5000],
				   'C':[12,34,23,67]})
data 

在这里插入图片描述

  • 将A列这一列作为行索引

    • key为数据表某一列
python">data_1=data.set_index('A')
data_1

在这里插入图片描述

    • key为数据表某几列
python">data_1=data.set_index(['A','B'])
data_1

在这里插入图片描述

  • key为数组列表
python">data_1=data.set_index([pd.Index([1,2,3,4])])
data_1

在这里插入图片描述

python">data_1=data.set_index([pd.Series([1,2,3,4])])
data_1

在这里插入图片描述

    • drop=True,默认。
python">data_1=data.set_index('A',drop=True,append=False,inplace=False,verify_integrity=False)
data_1

在这里插入图片描述

    • drop=False
python">data_1=data.set_index('A',drop=False,append=False,inplace=False,verify_integrity=False)
data_1

在这里插入图片描述

对比drop=True和drop=False,可以看到,drop=False时,被作为行索引的那一列数据仍然被保留下来了。

    • append=False,默认。
python">data_1=data.set_index('A',drop=True,append=False,inplace=False,verify_integrity=False)
data_1

在这里插入图片描述

    • append=True
python">data_1=data.set_index('A',drop=True,append=True,inplace=False,verify_integrity=False)
data_1

在这里插入图片描述
对比append=True和append=False,可以看到,append=True时,原来行索引和新的行索引一起被保留下来了。

三、reset_index()

功能:reset_index()方法可能最经常使用的地方是处理groupby()方法调用后的数据。主要可以将数据表中的索引还原为普通列并重新变为默认的整型索引。

函数语法

DataFrame.reset_index(level=None, *, drop=False, inplace=False, col_level=0, col_fill=‘’, allow_duplicates=_NoDefault.no_default, names=None)[source]

参数说明

  • key:数值类型可以为:int、str、tuple或list,默认无。
  • drop:当指定drop=False(默认为False)时,则索引列会被还原为普通列;否则,如设置为True,原索引列会被丢弃。
  • inplace:表示当前操作是否对原数据重新,默认为False,否。
  • col_level:数值类型为int或str,默认值为0,如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一级。
  • col_fill:对象,默认‘’,如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名。

举例
模拟样本数据

python">import pandas as pd 
import numpy as np
data=pd.DataFrame({'A':['apple','orange','grape','pear'],
				   'B':[1000,2300,4000,5000],
				   'C':[12,34,23,67]})
data 

在这里插入图片描述

reset_index()有两种情况:第一种对原来的数据表进行reset,第二种是对使用过的set_index()函数进行reset。

  • 第一种:对原来的数据表进行reset

    • 默认 drop=False
python">data_1=data.reset_index()
data_1

在这里插入图片描述
原来索引值[0, 1, 3]被还原成了普通列,同时被系统冠名为index字段。

    • drop=True
python">data_1=data.reset_index(drop=True)
data_1

在这里插入图片描述

可以看到,输出结果和原来的数据表没有区别。但是其实在这个时候是有操作的,是在原有的索引列重置索引,同时不另外添加新列。下面举例1能比较直观感受到重置索引的操作。

举例1:重置索引的操作

重新创建数据表

python">import pandas as pd 
import numpy as np
data=pd.DataFrame({'A':['apple','orange','grape','pear'],
				   'B':[1000,2300,4000,5000],
				   'C':[12,34,23,67]})
data 

在这里插入图片描述

删除索引值为1的行,实际上就是第二行。

python">data.drop(labels=1,axis=0,inplace=True)
data

在这里插入图片描述
如果同样的代码再删除一次,就会报下面的错误

python">data.drop(labels=1,axis=0,inplace=True)
data

在这里插入图片描述
报错原因:一个数据表里一共有4行,我们把第2行给删掉了,就会顺道对应把索引1删掉,这时候数据的索引就会变成[1、2、3],即使这个时候原来的第3行数据现在变成第2行了,现在也无法用索引第2行的方式来获取现在的第2行(原来的第3行),因为索引已经乱了。

我们该如何解决这个问题呢?

答案:要将索引重置,这样后面再次使用才不会因为索引不存在而报错。重置索引的方法是:reset_index()。

reset_index(),默认(drop = False),当我们指定(drop = True)时,则不会保留原来的index,会直接使用重置后的索引。

python">data.reset_index(drop=True,inplace=True)
data

在这里插入图片描述
再试试删除索引值为1,代码就可以运行成功。

python">data.drop(labels=1,axis=0,inplace=True)
data

在这里插入图片描述

举例2:groupby()方法调用后的dataframe使用reset

python">import pandas as pd 
import numpy as np
data=pd.DataFrame({'A':['apple','orange','orange','pear'],
				   'B':[1000,2300,4000,5000],
				   'C':[12,34,23,67]})
data 

在这里插入图片描述

python">data_1=data.groupby('A')[['B','C']].mean()
data_1

在这里插入图片描述

python">data_1.reset_index()

在这里插入图片描述

  • 第二种:对使用过的set_index()函数进行reset。
python">data_1=data.set_index('A')
data_1

在这里插入图片描述

    • drop=False,默认。
python">data_1.reset_index(drop=False)

在这里插入图片描述

    • drop=True
python">data_1.reset_index(drop=True)

在这里插入图片描述

对比drop=True和drop=False,可以看到,drop=False时,A列刚刚被作为索引列,被还原成原来的样子。当drop=True时,A列被删除了。


参考文章:
set_index官方文档
reset_index官方文档
https://zhuanlan.zhihu.com/p/110819220
http://anders.wang/pandaszhong-set_index-he-reset_index-yi-ji-reindex-qu-bie/


http://www.niftyadmin.cn/n/4993847.html

相关文章

Mysql多表操作

文章目录 1. 概述2. 内连接3. 外连接4. 自连接5. 联合查询-union,union all6. 子查询 1. 概述 在项目开发中,在进行数据库表结构设计是,会根据业务需求和业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所…

YOLOv5算法改进(11)— 替换主干网络之EfficientNetv2

前言:Hello大家好,我是小哥谈。EfficientNetV2是一个网络模型,旨在提供更小的模型和更快的训练速度。它是EfficientNetV1的改进版本。EfficientNetV2通过使用更小的模型参数和采用一种称为Progressive Learning的渐进学习策略来实现这一目标。…

Nuxt 菜鸟入门学习笔记五:CSS 样式

文章目录 本地样式表在组件内导入通过 Nuxt 配置 CSS 属性导入使用字体导入通过 NPM 发布的样式表 外部样式表动态添加样式表【高级】使用 Nitro 插件修改渲染的头部 使用预处理器单文件组件 SFC 样式类和样式绑定使用 v-bind 的动态样式Scoped StylesCSS Modules预处理器支持 …

笔记本电脑开机后网线黑屏

笔记本电脑开机后网线黑屏 笔记本电脑是现代社会中不可或缺的一部分,为我们带来了高效、便捷的工作与娱乐。然而,有时候当我们使用笔记本电脑时,可能会遇到开机后网线黑屏的问题。这个问题让我们感到非常困惑,不知道该如何解决问…

vue2中使用vuex全面解析

vue2中使用vuex全面解析 初入前端写的是vue2,近些年一直在做vue3的项目,久未接触过vue2的代码了,今日突然维护了一个v2项目记忆已不似当年,今日对我以往所有接触的vuex使用做个总结。 vue2中使用vuex基础模板 store文件夹下的i…

【SpringBoot】Swagger和knife4j的使用

文章目录 前言1.什么是Swagger和Knife4j2.Swagger和Knife4j怎么用2.1 引入依赖2.2 设置配置类2.3 启动验证 3.完结撒花 前言 springboot笔记集合: springboot笔记合计 没用的废话理论不多说,会用就完了 1.什么是Swagger和Knife4j Swagger是一种开源的API描述语言…

MyBatis中CDATA的作用

一、<![CDATA[]]>简介 在XML文档的解析过程中&#xff0c;首先查找元素的起始符&#xff0c;即字符"<“和字符”&“。字符”<“表示为新元素的开始&#xff0c;字符”&"表示为字符实体的开始。CDATA的作用是保护这些特殊字符&#xff08;例如&a…

ClickHouse进阶(五):副本与分片-1-副本与分片

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…