pandas:reset_index及set_index的解释

2023-05-16

目录

1、pandas.DataFrame.set_index

2、pandas.DataFrame.reset_index


1、pandas.DataFrame.set_index

  • 函数原型:
DataFrame.set_index(self, keys, drop=True, append=False, inplace=False, verify_integrity=False)
  • 作用:

使用现有列设置DataFrame索引,即使用一个或多个现有的列或数组(正确的长度)设置DataFrame索引(行标签)。索引可以替换现有索引或在其上展开。——看不懂?没关系,先记着,看下例子就知道了。

  • 对常用参数的理解:

(参考官网:https://pandas.pydata.org/pandasdocs/stable/reference/api/pandas.DataFrame.set_index.html#pandas.DataFrame.set_index)

keyslabel or array-like or list of labels/arrays

需要进行set操作的单个或多个列名。

This parameter can be either a single column key, a single array of the same length as the calling DataFrame, or a list containing an arbitrary combination of column keys and arrays. Here, “array” encompasses Series, Index, np.ndarray, and instances of Iterator.

dropbool, default True

是否删除将被作为新index的列。

Delete columns to be used as the new index.

  • 举几个栗子说明:

0、首先我们简单了解下pandas的DataFrame的数据结构,如下表所示。target1、target2代表目标(target),即数据所属的类别。label代表target的标签,也可以理解为target名,这部分可以没有。attribute1~attribute3为属性,即目标所具有的属性类别。1~6为数据内容。

DataFrame的结构
 attribute1attribute2attribute3
(label)   
target1123
target2456

1、构造数据:

import pandas as pd
import numpy as np
df = pd.DataFrame({'month': [1, 4, 7, 10],
                   'year': [2012, 2014, 2013, 2014],
                   'sale': [55, 40, 84, 31]})
print(df)
"""------------------结果----------------------"""
   month  year  sale
0      1  2012    55
1      4  2014    40
2      7  2013    84
3     10  2014    31

2、将索引设置为“month”列:

df2 = df.set_index('month')
print(df2)
"""------------------结果----------------------"""
       year  sale
month
1      2012    55
4      2014    40
7      2013    84
10     2014    31

3、将索引设置为“month”列,同时设置drop=False:

df5 = df.set_index('month', drop=False)
print(df5)
"""------------------结果----------------------"""
       month  year  sale
month
1          1  2012    55
4          4  2014    40
7          7  2013    84
10        10  2014    31

4、使用列'year'和'month'创建一个MultiIndex :

df3 = df.set_index(['year', 'month'])
print(df3)
"""------------------结果----------------------"""
            sale
year month
2012 1        55
2014 4        40
2013 7        84
2014 10       31

5、使用一个index和column创建一个MultiIndex :

df4 = df.set_index([pd.Index([1, 2, 3, 4]), 'year'])
print(df4)
"""------------------结果----------------------"""
        month  sale
  year
1 2012      1    55
2 2014      4    40
3 2013      7    84
4 2014     10    31

2、pandas.DataFrame.reset_index

  • 函数原型:
DataFrame.reset_index(self, level = None, drop = False, inplace = False, col_level = 0, col_fill = '') 
  • 作用:

官方解释:重置索引(index)或索引的一个级别(level)。重置DataFrame的索引,并使用默认索引。如果DataFrame有一个多索引,此方法可以删除一个或多个级别。—— 看完有点懵是吧。。。。。。我也是hhh,下面是通俗点的:

从函数的字面意思上讲就是重置索引的作用,通俗点说,还就是这么个意思!具体点儿呐?比如我们在使用随机森林的过程中,需要对原始数据进行随机抽样来组成新的样本数据,但此时都得到的样本数据在顺序上来看会有点乱,另外数据看上去也不会太整齐。利用该函数可以使数据得到重新排列并看起来更加整齐。该函数常用于在数据重组过后,对数据重新设置连续行索引。

  • 对常用参数的理解(对于这些参数下面会有具体的例子):

levelint, str, tuple, or list, default None

只从索引(index)中删除给定的级别(level)。默认移除所有级别。

dropbool, default False

是否将索引重置为默认整数索引。即在新增整数索引时是否删除原来的索引。

  • 举几个栗子说明(参考官网:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reset_index.html):

1、首先创建DataFrame,创建的DataFrame的index均为字符串:

import pandas as pd
import numpy as np
df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],  # index是:猎鹰、鹦鹉、狮子、猴子
                  columns=('class', 'max_speed'))
print(df)
"""---------------运行结果---------------"""
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN

2、当我们重置索引时,此时默认drop=False,旧index被添加为一列,并使用一个新的连续index。注意结果与原来数据的区别,原数据的index被视为一个新的列并添加列名index,同时添加了一个新的索引0~3。

df1 = df.reset_index()
print(df1)
"""-------------运行结果-------------"""
    index   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal        NaN

3、我们可以设置drop=True来避免旧索引被添加为列,即在新增整数索引前删除旧索引。从结果看出,drop=True时直接将原有的index去掉,添加新的顺序索引。

df2 = df.reset_index(drop=True)
print(df2)
"""--------------运行结果----------------"""
    class  max_speed
0    bird      389.0
1    bird       24.0
2  mammal       80.5
3  mammal        NaN

4、另外,在MultiIndex的情况如下。我们重新构造多索引数据,index的label分别为‘class’与‘name’,注意,这里的index label不是列名。列名分别为speed_max和species_type。可以看出,多索引的数据结构看起来不是那么的整齐。

index = pd.MultiIndex.from_tuples([('bird', 'falcon'),
                                   ('bird', 'parrot'),
                                   ('mammal', 'lion'),
                                   ('mammal', 'monkey')],
                                  names=['class', 'name'])
columns = pd.MultiIndex.from_tuples([('speed_max',), ('species_type',)])
df3 = pd.DataFrame([(389.0, 'fly'),
                   ( 24.0, 'fly'),
                   ( 80.5, 'run'),
                   (np.nan, 'jump')],
                  index=index,
                  columns=columns)
print(df3)
"""-------------------运行结果---------------------"""
              speed_max species_type
class  name
bird   falcon     389.0          fly
       parrot      24.0          fly
mammal lion        80.5          run
       monkey       NaN         jump

5、接下来我们可以使用 reset_index来看下效果。这里将index label重置为列名,并将index作为新增的列存留。在重置索引之后相比原始数据是不是起码看着就很舒服了。

df4 = df3.reset_index()
print(df4)
"""-----------------运行结果---------------------"""
    class    name speed_max species_type
0    bird  falcon     389.0          fly
1    bird  parrot      24.0          fly
2  mammal    lion      80.5          run
3  mammal  monkey       NaN         jump

6、另外,如果像df3这样的索引有多个级别(level),我们可以只重置其中的一个子集(subset)。比如重置df3的class子集,重置之后原label为‘’class‘的index被重置为列名为‘class’的数据列。

df5 = df3.reset_index(level='class')
print(df5)
"""----------------运行结果----------------"""
         class speed_max species_type
name
falcon    bird     389.0          fly
parrot    bird      24.0          fly
lion    mammal      80.5          run
monkey  mammal       NaN         jump

7、我们对df5执行drop=True的操作,结果如下。可以发现,结果只删除了1个index,即label为‘name’的index,这是由于在df5中我们已经把原label为‘class’的index重置为列名为‘class’的列数据了。

df6 = df5.reset_index(drop=True)
print(df6)
"""----------------运行结果----------------"""
    class speed_max species_type
0    bird     389.0          fly
1    bird      24.0          fly
2  mammal      80.5          run
3  mammal       NaN         jump

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas:reset_index及set_index的解释 的相关文章

随机推荐

  • ARCHPR(压缩密码暴力破解软件)

    常年是用电脑的小伙伴 xff0c 应该都有过忘记压缩包密码的情况 xff0c 那么这个时候该怎么办呢 xff1f 别慌 xff0c 不妨来试试ARCHPR吧 xff01 该软件不仅支持所有版本的ZIP PKZip WinZip RAR Wi
  • 佳佳数据恢复软件免费版

    佳佳数据恢复软件免费版是一款功能优异 xff0c 且操作简单的电脑数据恢复应用 xff0c 该软件不但是支持免费试用的 xff0c 而且还不限恢复文件个数和大小 xff0c 能够高效率的将误删除 误格式化 分区打不开 误清空回收站 磁盘丢失
  • 文件md5校验工具

    文件md5校验工具是一款方便实用 xff0c 且绿色迷你的md5码查询对比工具 xff0c 该工具有着精妙的摘要算法 xff0c 能够帮助用户进行查看任意文件的md5验证码 毕竟只有一个文件在传输过程中损坏 xff0c 亦或者内容被修改过
  • 视频转换处理软件

    视频转换处理软件是一款专业 易用 高效的视频处理工具 xff0c 软件内置了格式转换 视频剪切 视频转GIF 视频加水印 视频优化 旋转和翻转等六大功能 xff0c 并每个功能模块也都是互相独立的 xff0c 这也就是说 xff0c 用户在
  • 视频剪切软件

    视频剪切是一款功能强势 操作简单的视频剪切工具 xff0c 它不但可以帮助用户将视频中的精彩片段剪切出来 xff0c 轻松制作需要的短片视频 xff0c 而且还支持任意设置输出视频的视频属性和音频属性 xff0c 并支持MP4 rmvb a
  • 神奇电商宝贝下载软件

    神奇电商宝贝下载软件是一款专业 易用 高效的电商软件 xff0c 可帮助用户快速获取1688 天猫 淘宝 速卖通 企业叮咚等平台店铺中的主图视频 详情视频 主图图片 详情图片等所有信息 xff0c 从而轻松满足电商用户的所有需求 而且该软件
  • 布谷鸟算法

    布谷鸟算法是将布谷鸟育雏行为与Levy飞行算法相结合的一种算法 在布谷鸟算法中 xff0c 有两个算法或者说两个位置更新是关键 xff1a 第一个是布谷鸟寻找最优解时的算法 xff1a 一个是布谷鸟寻找鸟窝下蛋的寻找路径是采用早已就有的萊维
  • matlab实现虚拟力策略传感器分布

    第一次写文章 主要想记录一下编程过程中的坎 1 虚拟力策略 虚拟力法原理是 将机器人在环境中的运动视为一种机器人在虚拟的人工受力场的运动 障碍物对机器人产生斥力 目标点对机器人产生引力 引力和斥力的合力作为机器人的加速力 来控制机器人的运动
  • pandas:sample函数解释

    目录 1 函数定义 2 作用 xff1a 3 举个栗子 4 参数解释 1 函数定义 DataFrame sample self FrameOrSeries n 61 None frac 61 None replace 61 False we
  • [Pixhawk/PX4]开发环境搭建(Ubuntu 18.04)和问题总结

    主要记录了PX4环境在Ubuntu 18 04下的搭建过程和问题总结 由于gazebo在ros安装中一般会包括 xff0c 所以gazebo安装没有介绍 一 基础资源下载 这是我第一次接触ubuntu系统的安装 xff0c 所以可能有些步骤
  • 数独基础技巧

    数独基础思想 数独作为一个益智游戏 xff0c 想必大家都或多或少接触过 xff0c 基础思想就是在9 9的方格中 xff0c 每一行每一列每个九宫格都不重复地存在1 9这九个数字 xff0c 这也意味着对一个正确的数独题目都有一个固定的答
  • VM VirtualBox虚拟机路径迁移

    在学习Ubuntu的时候把虚拟机放到了机械硬盘 xff0c 所以系统运行很卡顿 因此尝试了迁移虚拟机到固态硬盘中 方法如下 xff1a 导出需要迁移的虚拟电脑 点击管理 xff0c 点击导出虚拟电脑 选择需要导出的虚拟电脑 xff0c 点击
  • 设计使用 | 四个免费的渐变配色网站

    在进行设计工作时 xff0c 有时候需要一些渐变的配色做底图更好看些 xff0c 本来用Photoshop也可以自己制作 xff0c 但是经常一做就很丑 xff0c 所以还是直接找其他网站上的吧 一 CoolHue 地址 xff1a Gra
  • Ubuntu+Windows双系统,开机默认启动项设置Windows优先

    电脑是Ubuntu18 04 43 Win10双系统 xff0c 开机一直都是默认先Ubuntu xff0c Windows在最下面 xff0c 有时候按下开机键一不留神就进Ubuntu了 xff0c 于是寻思着在启动项中设置为默认优先Wi
  • 解决Gazebo闪退,提示escalating to SIGKILL on server的问题,Melodic更新gazebo9到gazebo11

    0 xff0c 问题描述 今天拿Gazebo自定义一个简单地图 xff0c 建完墙都没什么事 xff0c 结果在墙上加门的时候 xff0c 程序卡死了 xff0c 重复几次都是这样的情况 xff0c 在终端中也出现了提示 escalatin
  • Windows 10 安装 Android 13版本的安卓子系统(带 Google Play 商店和 Magisk) 2210.40000.7.0

    根据微软的说明 xff0c WSA 仅支持 Windows11 xff0c Windows10 及以前的操作系统无缘WSA 不过我们来看一下原理哈 xff1a Android 这个系统 xff0c 它是基于Linux 系统来开发的 xff0
  • Windows 11 安装 Android 13版本的安卓子系统(带 Google Play 商店和 Magisk) 2210.40000.10.0

    微软最近刚刚发布了适用于 Android 的 Windows 子系统 xff0c 构建版本为 2211 xff0c 采用 Android 13 xff0c 目前这还是一个预览版本 xff0c 理论上只有Beta用户才能用 xff0c 但是用
  • 利用 ChatGPT 简化微信聊天内容

    以下文章来源于蓝点网 xff0c 作者山外的鸭子哥 xff0c 侵删 各种聊天软件的群太多 消息太多压根没时间看怎么办 xff1f 那试试使用 ChatGPT 帮你整理群聊记录提取重点和发个总结内容 xff1f ChatGPT目前已经在很多
  • 一步设置,立刻开启New Bing!

    前阵子微软的新必应不是特火嘛 xff0c 我也想试试来着 xff0c 结果除了要一堆设置之外 xff0c 还要等待候补 xff0c 所以也就不了了之了 xff0c 结果今天突然发现 xff0c 只需要进行简单的一步设置 xff0c 就可以立
  • pandas:reset_index及set_index的解释

    目录 1 pandas DataFrame set index 2 pandas DataFrame reset index 1 pandas DataFrame set index 函数原型 xff1a DataFrame set ind