pandas学习笔记-重新索引

来源:互联网 发布:剑灵龙女身材数据 编辑:程序博客网 时间:2024/06/14 15:47

pandas学习笔记-重新索引

pandas对象的一个重要方法是reindex,其作用是创建一个适应新索引的新对象。以一个简单示例来说:

import pandas as pdobj = pd.Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])print obj
结果d    4.5b    7.2a   -5.3c    3.6dtype: float64

调用该Series的reindex将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值:

obj1 = obj.reindex(['a','b','c','d','e'])print obj1
结果a   -5.3b    7.2c    3.6d    4.5e    NaNdtype: float64
obj2 = obj.reindex(['a','b','c','d','e'],fill_value=0)print obj2
结果a   -5.3b    7.2c    3.6d    4.5e    0.0dtype: float64

对于时间序列这样的有序数组,重新索引时可能需要做一些插值处理。method选项即可达到此目的,例如,使用ffill可以实现向前值填充:

obj3 = pd.Series(['blue','purple','yellow'],index=[0,2,4])obj4 = obj3.reindex(range(6),method='ffill')print obj4
结果0      blue1      blue2    purple3    purple4    yellow5    yellowdtype: object

reindex的(插值)method选项

参数 说明 ffill或pad 向前填充(或搬运)值 bfill或backfill 向后填充(或搬运)值

对于DataFrame,reindex可以修改(行)索引、列,或两个都修改。如果仅传入一个序列,则会重新索引行:

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['Ohio','Texas','California'])print frame
结果   Ohio  Texas  Californiaa     0      1           2c     3      4           5d     6      7           8
frame2 = frame.reindex(['a','b','c','d'])print frame2
结果   Ohio  Texas  Californiaa   0.0    1.0         2.0b   NaN    NaN         NaNc   3.0    4.0         5.0d   6.0    7.0         8.0

使用columns关键字即可重新索引列:

states = ['Texas','Utah','California']frame3 = frame.reindex(columns=states)print frame3
结果   Texas  Utah  Californiaa      1   NaN           2c      4   NaN           5d      7   NaN           8

也可以同时对行和列进行重新索引,而插值则只能按行应用(即轴0):

frame4 = frame.reindex(index=['a','b','c','d'],method='ffill',columns=states)print frame4
结果   Texas  Utah  Californiaa      1   NaN           2b      1   NaN           2c      4   NaN           5d      7   NaN           8

利用ix的标签索引功能,重新索引任务可以变得更简洁:

frame5 = frame.ix[['a','b','c','d'],states]print frame5
结果   Texas  Utah  Californiaa    1.0   NaN         2.0b    NaN   NaN         NaNc    4.0   NaN         5.0d    7.0   NaN         8.0
0 0