其他分享
首页 > 其他分享> > pandas reindex、set_inde 和 reset_index

pandas reindex、set_inde 和 reset_index

作者:互联网

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

一,重索引 (reindex)

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

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

参数注释:

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

index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
                  'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
                  index=index)
df
           http_status  response_time
Firefox            200           0.04
Chrome             200           0.02
Safari             404           0.07
IE10               404           0.08
Konqueror          301           1.00

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

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

new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10', 'Chrome']
df.reindex(new_index)
               http_status  response_time
Safari               404.0           0.07
Iceweasel              NaN            NaN
Comodo Dragon          NaN            NaN
IE10                 404.0           0.08
Chrome               200.0           0.02

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

df.reindex(new_index, fill_value=0)
               http_status  response_time
Safari                 404           0.07
Iceweasel                0           0.00
Comodo Dragon            0           0.00
IE10                   404           0.08
Chrome                 200           0.02

二,设置索引(set_index)

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

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

参数注释:

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

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

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

df.set_index('month')
       year  sale
month
1      2012    55
4      2014    40
7      2013    84
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,存在一个行索引:

df = pd.DataFrame([('bird', 389.0), ('bird', 24.0), ('mammal', 80.5),('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))
df
         class  max_speed
falcon    bird      389.0
parrot    bird       24.0
lion    mammal       80.5
monkey  mammal        NaN

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

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

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

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

 

参考文档:

标签:reset,index,reindex,False,df,NaN,None,索引
来源: https://www.cnblogs.com/ljhdo/p/16575491.html