• pandas reindex、set_index 和 reset_index


    操纵索引包括:重索引、设置索引、替换轴的索引、重置索引

    一,重索引 (reindex)

    重索引是指数据框按照新的索引进行排列,如果已存的索引和新索引不匹配,那么使用NA来填充。

    1. DataFrame.reindex(labels=None, index=None, columns=None, axis=None,
    2. method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

    参数注释:

    • labels:array-like,新的轴(axis)标签,轴由参数axis指定
    • index,columns:新索引,如果指定index参数,等价于指定labels和axis=0/'index',如果指定columns,等价于指定labels和axis=1/'columns'
    • axis:轴,axis=0/'index'表示行,axis=1/'columns'表示列
    • method:用于填充的方法,有效值是None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’,
      •   None表示不会填充
      •   ‘backfill’/’bfill’:表示回填,用NA的后面第一个有效值来填充当前的NA
      •   ‘pad’/’ffill’:表示补填,用前面第一个有效值来填充当前的NA
      •   ‘nearest’:用最接近NA的有效值来填充当前的NA
    • copy:默认值是True,返回新的对象
    • level:用于MultiIndex,在一个级别上,与MultiIndex进行匹配。
    • fill_value:标量值,默认值是np.NaN,用于对缺失值进行填充的值
    • limit:填充的最大次数
    • tolerance:可选参数,表示不能完全匹配的原始标签和新标签之间的最大距离,匹配位置处的索引值满足:abs(index_position -  target_position)<= tolerance,容差可以是标量值(对所有序列值应用相同的容差),也可以是list-like结构(对每个序列元素应用可变容差),list-like结构包括列表、元组、数组和序列,并且list-like结构的长度和序列的长度和长度必须相同。

     举个例子,有如下的数据集df,df的行索引由index指定,列索引是http_status和response_time:

    1. index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
    2. df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
    3. 'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
    4. index=index)
    5. df
    6. http_status response_time
    7. Firefox 200 0.04
    8. Chrome 200 0.02
    9. Safari 404 0.07
    10. IE10 404 0.08
    11. Konqueror 301 1.00

    重索引(reindex)是指为原始数据集应用新的索引,并按照新的索引来对数据进行排序,如果原始索引不存在于新索引中,那么相应的Cell值会被填充为默认值的np.NaN。

    如下所示,原始索引不存在Iceweasel 和 Comodo Dragon,这两个的数据值都设置为NaN。其他三行的索引都存在于原始索引中,使用原始的值。通过reindex之后,数据集的索引变更为新索引。

    1. new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10', 'Chrome']
    2. df.reindex(new_index)
    3. http_status response_time
    4. Safari 404.0 0.07
    5. Iceweasel NaN NaN
    6. Comodo Dragon NaN NaN
    7. IE10 404.0 0.08
    8. Chrome 200.0 0.02

    对于填充值,可以通过参数fill_value来设置:

    1. df.reindex(new_index, fill_value=0)
    2. http_status response_time
    3. Safari 404 0.07
    4. Iceweasel 0 0.00
    5. Comodo Dragon 0 0.00
    6. IE10 404 0.08
    7. Chrome 200 0.02

    二,设置索引(set_index)

    把现有的列设置为行索引,使用set_index()函数把已有的列转换为行索引,也可以使用set_axis()函数替换掉已有的轴索引。使用现有的列作为DataFrame的索引:

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

    参数注释:

    • keys:列标签,或列标签的列表,
    • drop:默认值是True,表示删除keys参数指定的列;设置为False,表示不删除keys参数指定的列。
    • append:默认值是False,表示删除原始行索引;如果设置为True,表示向现有的行索引中追加索引。
    • verify_integrity:默认值是False,不检查新索引是否存在重复值。

    对于以下的数据,pandas默认创建一个int range索引:

    1. df = pd.DataFrame({'month': [1, 4, 7, 10],
    2. 'year': [2012, 2014, 2013, 2014],
    3. 'sale': [55, 40, 84, 31]})
    4. df
    5. month year sale
    6. 0 1 2012 55
    7. 1 4 2014 40
    8. 2 7 2013 84
    9. 3 10 2014 31

    设置month为新的索引,默认值是drop=True,append=False,这表示会删除month列,并使用month列来替换原始的索引:

    1. df.set_index('month')
    2. year sale
    3. month
    4. 1 2012 55
    5. 4 2014 40
    6. 7 2013 84
    7. 10 2014 31

    三,重置索引(reset_index)

     重置索引表示把DataFrame的索引设置为默认值,也就是从0开始到N-1的整数位置索引。设置索引是把列转换为索引,而重置索引可以认为是把行索引转换为数据集的一列。重置索引也可以用于删除原始索引,如果数据集存在多级索引(MultiIndex),那么reset_index 可以用于移除多级索引的一个级别(level)或多个级别。

    DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
    

    drop 参数表示是否删除原始索引,如果设置为False,那么索引转换为列;如果设置为True,表示把索引删除。

    有如下数据df,存在一个行索引:

    1. df = pd.DataFrame([('bird', 389.0), ('bird', 24.0), ('mammal', 80.5),('mammal', np.nan)],
    2. index=['falcon', 'parrot', 'lion', 'monkey'],
    3. columns=('class', 'max_speed'))
    4. df
    5. class max_speed
    6. falcon bird 389.0
    7. parrot bird 24.0
    8. lion mammal 80.5
    9. monkey mammal NaN

    重置索引,并把原始的索引转换为数据集的一列,现有的索引使用pandas默认的索引。

    1. df.reset_index()
    2. index class max_speed
    3. 0 falcon bird 389.0
    4. 1 parrot bird 24.0
    5. 2 lion mammal 80.5
    6. 3 monkey mammal NaN

    重置索引,并把原始的索引删除:

    1. df.reset_index(drop=True)
    2. class max_speed
    3. 0 bird 389.0
    4. 1 bird 24.0
    5. 2 mammal 80.5
    6. 3 mammal NaN

    参考文档:

  • 相关阅读:
    嵌入式单片机笔试题
    【CSDN|每日一练】小艺的英文名
    python-数据可视化(总)
    【MySQL查询常见面试题】如何避免全表扫描
    tcp的其他机制
    小程序的console中出现:。。。不在以下 request 合法域名列表中,请参考文档:。。。的报错解决
    前后端分离项目使用SSL部署
    自己最好的canny实现(c#)
    青少年软件编程(Python语言)等级考试试卷目录一览
    vue指令
  • 原文地址:https://blog.csdn.net/upluck/article/details/126286221