重新索引
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]
結果: