重新索引
Series和DataFrame在创建时可以对其index属性进行修改(DataFrame中index修改行属性)。创建后需要对index修改需要用到reindex方法。
s1 = pd.Series([1,2,3],index=['c','a','b'])
s1.reindex(['a','b','c'])
'''
结果:
a 2
b 3
c 1
dtype: int64
'''
如果某个索引值在原Series中不存在,就会引入缺失值NaN。一般情况下,对于有序序列,重新索引时会做插值处理。
s1 = pd.Series(['red','orange','yellow'],index=[0,2,4])
s1
'''
0 red
2 orange
4 yellow
dtype: object
'''
s1.reindex([0,1,2,3,4,5],method='ffill')
'''
0 red
1 red
2 orange
3 orange
4 yellow
5 yellow
dtype: object
'''
其中向前填充的method是ffill,向后填充的method是bfill。
对与DataFrame,若只传入一个序列,则重新索引行,想要索引列需要用columns属性。
#传入一个数组
dict1 = {"neveda":{2001:2.4,2002:2.9},
"ohio":{2001:1.7,2002:3.6}}
frame = pd.DataFrame(dict1)
frame.reindex([2002,2001])
结果:
#修改columns属性
dict1 = {"neveda":{2001:2.4,2002:2.9},
"ohio":{2001:1.7,2002:3.6}}
frame = pd.DataFrame(dict1)
frame.reindex(index=[2002,2001],columns=['ohio','neveda'])
结果:
下面记录其他一些常用的reindex属性:
1.fill_value:重新索引的过程中,缺失值的替代值。
2.limit:向前填充或向后填充的最大填充量。
丢弃指定轴上的项
采用drop方法:
s1 = pd.Series([1,2,3],index=['c','a','b'])
s1.reindex(['a','b','c'])
s1.drop('b')
'''
结果;
c 1
a 2
dtype: int64
'''
索引选取和过滤
Series索引与Numpy数组没什么不同,只是Series索引不止是整数。而DataFrame的索引就是获取整个行或列。
Series索引需要注意的是,它的切片与数组不同,即两侧都是闭区间。
s1 = pd.Series([1,2,3],index=['c','a','b'])
s1['c':'b']
'''
c 1
a 2
b 3
dtype: int64
'''
DataFrame索引可以通过切片或bool选取行:
data =pd.DataFrame(np.arange(16).reshape(4,4),
index=['one','two','three','four'],
columns=['first','second','third','forth'])
data[data['third']>5]
结果: