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

文章目录

  • 一、索引是什么?
  • 二、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。

举例
模拟样本数据

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为数据表某一列
data_1=data.set_index('A')
data_1

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

    • drop=False
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,默认。
data_1=data.set_index('A',drop=True,append=False,inplace=False,verify_integrity=False)
data_1

在这里插入图片描述

    • append=True
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:对象,默认‘’,如果列有多个级别,则确定其他级别的命名方式。如果没有,则重复索引名。

举例
模拟样本数据

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
data_1=data.reset_index()
data_1

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

    • drop=True
data_1=data.reset_index(drop=True)
data_1

在这里插入图片描述

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

举例1:重置索引的操作

重新创建数据表

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的行,实际上就是第二行。

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

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

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,会直接使用重置后的索引。

data.reset_index(drop=True,inplace=True)
data

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

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

在这里插入图片描述

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

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 

在这里插入图片描述

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

在这里插入图片描述

data_1.reset_index()

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

    • drop=True
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.hqwc.cn/news/93707.html

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

相关文章

短信验证码服务

使用的是 阿里云 阿里云官网 1.找到 左上角侧边栏 -云通信 -短信服务 2.在快速学习测试处 ,按照步骤完成快速学习,绑定要测试的手机号,选专用 【测试模板】,自定义模板需要人工审核,要一个工作日 3.右上角 获取 Acces…

Revit SDK:AutoParameter 添加参数

前言 这个例子介绍如果往族文件里添加参数。 内容 Revit 的参数,参考官方文档: 这个例子的关键接口: // 通过 FamilyManager 添加参数 FamilyParameter AddParameter(string parameterName, BuiltInParameterGroup parameterGroup, Categ…

matlab绘制局部放大图

ZoomPlot是一个交互式的matlab局部绘图库,其github仓库地址为 https://github.com/iqiukp/ZoomPlot-MATLAB。在使用库之前需要先将库下载到本地,可以直接添加到matlab的库中,也可以放在项目文件中直接使用。 简单使用 其实使用这个库只需要…

CocosCreator3.8研究笔记(三)CocosCreator 项目结构说明及编辑器的简单使用

我们通过Dashboard 创建一个2d项目,来演示CocosCreator 的项目结构。 等待创建完成后,会得到以下项目工程: 一、assets文件夹 assets文件夹:为资源目录,用来存储所有的本地资源,如各种图片,脚本…

爬虫异常处理之如何处理连接丢失和数据存储异常

在爬虫开发过程中,我们可能会遇到各种异常情况,如连接丢失、数据存储异常等。本文将介绍如何处理这些异常,并提供具体的解决代码。我们将以Python语言为例,使用requests库进行网络请求和sqlite3库进行数据存储。 1. 处理连接丢失 …

idea查找maven所有依赖

文章目录 idea自带的依赖结构图idea安装maven helper插件 idea自带的依赖结构图 缺点是只有依赖,没有版本 idea安装maven helper插件 settings–>plugins–>搜索maven helper并安装 安装后打开pom.xml文件会有依赖解析 勾选conflict就是有冲突的依赖选中…

mysql数据库创建只读用户

只需要三步,超级简单 很详细 方法1:在linux之centos上登陆/usr/local/mysql/bin/mysql -u root -p然后输入密码:ABCD2345 这是我的密码,你要输入自己对应的root密码然后1.创建只读用户: 使用以下 SQL 命令创建一个只…

python3.11教程1:python基础语法、程序控制、函数

文章目录 一、Python简介1.1 为什么学习python1.2 python安装与配置1.3 python解释器1.4 命令行参数1.4.1 sys.argv变量1.4.2 -c和-m选项 1.5 解释器的运行环境1.5.1 编码格式1.5.2 编码声明 二、Python基础语法2.1 行结构2.2 变量(标识符)2.3 字节串2.4…

Clion 使用ffmpeg 学习1 开发环境配置

Clion 使用ffmpeg 学习1 开发环境配置 一、准备工作1. 准备环境2. 下载FFmpeg 二、操作步骤1. Clion 新建一个C项目2. 修改 CMakeLists.txt3. 修改配置4. 运行测试5. 打印rtsp 流信息的 demo 一、准备工作 在视频处理和多媒体应用程序开发中,FFmpeg 是一个强大的开…

[论文阅读笔记26]Tracking Everything Everywhere All at Once

论文地址: 论文 代码地址: 代码 这是一篇效果极好的像素级跟踪的文章, 发表在ICCV2023, 可以非常好的应对遮挡等情形, 其根本的方法在于将2D点投影到一个伪3D(quasi-3D)空间, 然后再映射回去, 就可以在其他帧中得到稳定跟踪. 这篇文章的方法不是很好理解, 代码也刚开源, 做一…

python unitest自动化框架

以下举一个最简单的unitest实例,包含备注,自己拉取代码运行一次就知道原理了 import unittest import osclass TestSample(unittest.TestCase):classmethoddef setUpClass(cls) -> None:print(整个测试类只执行一次)def setUp(self) -> None:prin…

【以太网硬件二十】USXGMII是什么?

👉个人主页: highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 目录 回顾 概览 功能框图描述 XGMII接口和数据包 XGMII接口信号 XGMII数据流 …