学科分类
目录
数据分析

重置索引

Pandas中提供了一个重要的方法是reindex(),该方法的作用是对原索引和新索引进行匹配,也就是说,新索引含有原索引的数据,而原索引数据按照新索引排序。如果新索引中没有原索引数据,那么程序不仅不会报错,而且会添加新的索引,并将值填充为NaN或者使用fill_vlues()填充其他值。

reindex()方法的语法格式如下:

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

上述方法的部分参数含义如下:

(1) index:用作索引的新序列。

(2) method:插值填充方式。

(3) fill_value:引入缺失值时使用的替代值。

(4) limit:前向或者后向填充时的最大填充量。

为了能让大家更好地理解,接下来,通过一个简单的示例来演示重新索引的使用,具体代码如下。

In [19]: import pandas as pd
         ser_obj = pd.Series([1, 2, 3, 4, 5], index=['c', 'd', 'a', 'b', 'e'])
         ser_obj
Out[19]: 
c  1
d  2
a  3
b  4
e  5
dtype: int64
# 重新索引
In [20]: ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f']) 
         ser_obj2
Out[20]: 
a  3.0
b  4.0
c  1.0
d  2.0
e  5.0
f  NaN
dtype: float64

上述示例中,创建了一个ser_obj对象,并为其指定索引为“c、d、a、b、e”,接着又调用了reindex()方法对索引重新排列,变为“a、b、c、d、e、f”,由于索引“f”对应的值不存在,所以使用NaN对缺失的数据进行填充。

如果不想填充为NaN,则可以使用fill_value参数来指定缺失值,具体示例代码如下。

In [21]: # 重新索引时指定填充的缺失值
         ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e', 'f'],fill_value = 6)
         ser_obj2
Out[21]: 
a  3
b  4
c  1
d  2
e  5
f  6
dtype: int64

fill_value参数会让所有的缺失数据都填充为同一个值。如果期望使用相邻的元素值(前边或者后边元素的值)进行填充,则可以使用method参数。method参数对应的值有多个,表1列举了method参数可以使用的值。

表1 method参数的可用值

参数 说明
ffill或pad 前向填充值
bfill或backfill 后向填充值
nearest 从最近的索引值填充

下面的示例代码演示了method参数的使用。

# 创建Series对象,并为其指定索引
In [22]: ser_obj3 = pd.Series([1, 3, 5, 7], index=[0, 2, 4, 6])
         ser_obj3
Out[22]: 
0  1
2  3
4  5
6  7
dtype: int64
In [23]: ser_obj3.reindex(range(6), method = 'ffill') # 重新索引,前向填充值
Out[23]: 
0  1
1  1
2  3
3  3
4  5
5  5
dtype: int64
In [24]: ser_obj3.reindex(range(6), method = 'bfill')# 重新索引,后向填充值
Out[24]: 
0  1
1  3
2  3
3  5
4  5
5  7
dtype: int64

上述示例中,创建了一个ser_obj3对象,并为其指定索引为“0、2、4、6”,接着又调用了reindex()方法对索引重新排列,变为“0、1、2、3、4、5”。

当method参数的值设为“ffill”时,则表示会使用前一个索引对应的数据填充到缺失的位置。因此,索引“1” 会填充索引“0”对应的数据“1”,索引“3” 会填充索引“2”对应的数据“3”,依此类推。

当method参数的值改为“bfill”时,则表示会使用后一个索引对应的数据填充到缺失的位置。因此,索引“1”会填充索引“2”对应的数据“3”,索引“3”会填充索引“4”对应的数据“5”,依此类推。

点击此处
隐藏目录