reindex方法用于重新为Pandas对象设置新索引。这不是就地修改,而是会参照原有数据,调整顺序。
In [96]: obj=pd.Series([4.5,7.2,-5.3,3.6],index = ['d','b','a','c']) In [97]: obj Out[97]: d 4.5 b 7.2 a -5.3 c 3.6 dtype: float64
reindex会按照新的索引进行排列,不存在的索引将引入缺失值:
In [99]: obj2 = obj.reindex(list('abcde')) In [100]: obj2 Out[100]: a -5.3 b 7.2 c 3.6 d 4.5 e NaN dtype: float64
也可以为缺失值指定填充方式method参数,比如ffill表示向前填充,bfill表示向后填充:
In [101]: obj3 = pd.Series(['blue','purple','yellow'],index = [0,2,4]) In [102]: obj3 Out[102]: 0 blue 2 purple 4 yellow dtype: object In [103]: obj3.reindex(range(6),method='ffill') Out[103]: 0 blue 1 blue 2 purple 3 purple 4 yellow 5 yellow dtype: object
对于DataFrame这种二维对象,如果执行reindex方法时只提供一个列表参数,则默认是修改行索引。可以用关键字参数columns指定修改的是列索引:
In [104]: f = pd.DataFrame(np.arange(9).reshape((3,3)),index=list('acd'),columns=['beijing','shanghai','guangzhou']) In [105]: f Out[105]: beijing shanghai guangzhou a 0 1 2 c 3 4 5 d 6 7 8 In [106]: f2 = f.reindex(list('abcd')) In [107]: f2 Out[107]: beijing shanghai guangzhou a 0.0 1.0 2.0 b NaN NaN NaN c 3.0 4.0 5.0 d 6.0 7.0 8.0 In [112]: f3 = f.reindex(columns=['beijing','shanghai','xian','guangzhou']) In [113]: f3 Out[113]: beijing shanghai xian guangzhou a 0 1 NaN 2 c 3 4 NaN 5 d 6 7 NaN 8
reindex()理解成"索引重排"貌似更好理解。