Pandas之重新索引


pandas对象的一个关键的方法是reindex,意味着使数据符合一个新的索引来构造一个新的对象。来看一下下面一个简单的例子:

obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj
d  4.5
b  7.2
a -5.3
c  3.6

在Series上调用reindex重排数据,使得它符合新的索引,如果那个索引的值不存在就引入缺失数据值:

obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2
a -5.3
b 7.2
c 3.6
d 4.5
e NaN
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)
a -5.3
b 7.2
c 3.6
d 4.5
e 0.0

为了对时间序列这样的数据排序,当重建索引的时候可能想要对值进行内插或填充。method选项可以是你做到这一点,使用一个如

ffill的方法来向前填充值:

obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill')
0   blue
1   blue
2 purple
3 purple
4 yellow
5 yellow

下表格是可用的method选项的清单。在此,内差比正向和反向填充更复杂。

参数 描述
ffill或pad 前向(或进位)填充
bfill或backfill 后向(或进位)填充

对于DataFrame,reindex可以改变(行)索引,列或两者。当只传入一个序列时,结果中的行被重新索引了:

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],columns=['Ohio', 'Texas', 'California'])
frame
   Ohio  Texas  California
a     0      1           2
c     3      4           5
d     6      7           8
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2
   Ohio  Texas  California
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

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

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

使用带标签索引的ix可以把重新索引做的更简单,但是ix方法在python3中已经被废弃,不建议会用。

frame.ix[['a', 'b', 'c', 'd'], states]


  Texas Utah California
a     1  NaN          2
b   NaN  NaN        NaN
c     4  NaN          5
d     7  NaN          8

总而言之,可以使用reindex对column和index进行列索引和行索引的编排,如果出现空值,可以用ffill或者bfile函数来填充,fill_value表示填充值。

results matching ""

    No results matching ""