1 簡介
重置索引(reindex)可以更改原 DataFrame 的行標籤或列標籤,並使更改後的行、列標籤與 DataFrame 中的資料逐一匹配。通過重置索引操作,您可以完成對現有資料的重新排序。如果重置的索引標籤在原 DataFrame 中不存在,那麼該標籤對應的元素值將全部填充為 NaN。
2 重置行列標籤
選取特定行、列。
示例:先構建資料
index = ['Firefox', 'Chrome', 'Safari', 'IE10', 'Konqueror']
df = pd.DataFrame({'http_status': [200, 200, 404, 404, 301],
'response_time': [0.04, 0.02, 0.07, 0.08, 1.0]},
index=index)
df
輸出結果:
http_status response_time
Firefox 200 0.04
Chrome 200 0.02
Safari 404 0.07
IE10 404 0.08
Konqueror 301 1.00
示例:同時使用行、列標籤選取資料。
new_index = ['Firefox', 'IE10', 'Safari']
df.reindex(index=new_index,columns=['response_time'])
輸出結果:
response_time
Firefox 0.04
IE10 0.08
Safari 0.07
示例:只使用行標籤選取資料。
new_index = ['Safari', 'Iceweasel', 'Comodo Dragon', 'IE10',
'Chrome']
df.reindex(new_index)
輸出結果:不存在的行使用 NaN 代替。
http_status response_time
Safari 404.0 0.07
Iceweasel NaN NaN
Comodo Dragon NaN NaN
IE10 404.0 0.08
Chrome 200.0 0.02
現有 a、b 兩個 DataFrame 物件,如果想讓 a 的行索引與 b 相同,您可以使用 reindex_like() 方法。
示例如下:
a = pd.DataFrame(np.arange(6).reshape((2,3)),columns=['col1','col2','col3'])
b = pd.DataFrame(np.arange(12).reshape((4,3)),columns=['col1','col2','col3'])
a.reindex_like(b)
輸出結果:由於 a 的 size 小於 b ,所以 2 、3行不存在,用 NaN 代替。
col1 col2 col3
0 0.0 1.0 2.0
1 3.0 4.0 5.0
2 NaN NaN NaN
3 NaN NaN NaN
示例:
b.reindex_like(a)
輸出結果:
col1 col2 col3
0 0 1 2
1 3 4 5
3 填充元素值
reindex_like() 提供了一個可選的引數 method
,使用它來填充相應的元素值,引數值介紹如下:
- pad/ffill:向前填充值;
- bfill/backfill:向後填充值;
- nearest:從距離最近的索引值開始填充。
示例:
a.reindex_like(b,method='ffill')
輸出結果:相當於從有資料的最後一行復制資料到下面的每一行。
col1 col2 col3
0 0 1 2
1 3 4 5
2 3 4 5
3 3 4 5
示例:
a.reindex_like(b,method='bfill')
輸出結果:相當於從最後一行復制資料到上面的行。
col1 col2 col3
0 0.0 1.0 2.0
1 3.0 4.0 5.0
2 NaN NaN NaN
3 NaN NaN NaN
示例:
a.reindex_like(b,method='nearest')
輸出結果:
col1 col2 col3
0 0 1 2
1 3 4 5
2 3 4 5
3 3 4 5
4 限制填充行數
reindex_like() 還提供了一個額外引數 limit,該引數用來控制填充的最大行數。
示例如下:
a.reindex_like(b,method='ffill',limit=1)
輸出結果:這裡只填充了 1 行。
col1 col2 col3
0 0.0 1.0 2.0
1 3.0 4.0 5.0
2 3.0 4.0 5.0
3 NaN NaN NaN
5 重新命名標籤
rename() 方法允許您使用某些對映 (dict或Series) 或任意函式來對行、列標籤重新命名。
原始資料:df1 =
col1 col2 col3
0 0 1 2
1 3 4 5
示例如下:
df1.rename(columns={'col1':'c1','col2':'c2','col3':'c3'},index={0:'A',1:'B'})
輸出結果:
c1 c2 c3
A 0 1 2
B 3 4 5
rename() 方法提供了一個 inplace 引數,預設值為 False,表示拷貝一份原資料,並在複製後的資料上做重新命名操作。若 inplace=True 則表示在原資料的基礎上重新命名。