pandas学习笔记-重新索引

pandas学习笔记-重新索引

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

import pandas as pd

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

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

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

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

obj3 = pd.Series(['blue','purple','yellow'],index=[0,2,4])
obj4 = obj3.reindex(range(6),method='ffill')
print obj4
结果
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: 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  California
a     0      1           2
c     3      4           5
d     6      7           8
frame2 = frame.reindex(['a','b','c','d'])
print 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']
frame3 = frame.reindex(columns=states)
print frame3
结果
   Texas  Utah  California
a      1   NaN           2
c      4   NaN           5
d      7   NaN           8

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

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

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

frame5 = frame.ix[['a','b','c','d'],states]
print frame5
结果
   Texas  Utah  California
a    1.0   NaN         2.0
b    NaN   NaN         NaN
c    4.0   NaN         5.0
d    7.0   NaN         8.0
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值