python reindex詳解

首先介紹reindex,它的作用是創建一個新對象,新對象的數據符合新的索引。示例如下所示

 

         從上圖可以看出,使用reindex後,索引進行了重排。如果某個索引值不存在,就會引入缺失值:

        

如果不想使用缺失值,可以通過fill_value參數填充默認值,如下所示

        

同時也可以使用method選項,使用method時,可用的參數包括ffill(前向填充)和bfill(後向填充)。

 

在使用method選項時,你可能會發現ffill或bfill填充的值與預期的值不符,如下圖所示:

 

         本來認爲‘o’索引填充的值應該是3,但上面填充的卻是4,這是爲什麼呢?

        

         因爲在reindex的括號內部使用method選項時:先按照索引的順序排序好,然後再填充值,填充完成後再按照reindex裏新索引的順序進行排列。

 

因此obj先按照a,b,c,d,o的順序排列好,d的值是4, o的值就被前向填充成4了。

        

         同理,如果使用bfill參數,因爲o後面沒有值了,o的值就是NaN,而不是2。如下圖所示

 

         但是如果使用.ffill()或.bfill(),就能夠達到我們想要的效果:填充值與前向/後項值相同。如下圖所示:

 

 

 

         同時需要注意的是,在使用method選項時,原數組裏的索引必須是已經經過排序的,如果原索引是亂序的,會彈出如下錯誤

index must be monotonic increasing or decreasing

 

         如下所示obj3的原索引未按順序排列:

 

         如果此時使用method選項,就會報錯:

 

         但使用.ffill()就不會有問題:

        

         使用method方式是舊python的做法,新版python中推薦使用.ffill()方式。

 

通過reindex還可以選擇特定的索引:

        

         對於DataFrame,reindex可以修改行索引或列索引。如果只傳遞一個序列,則會修改行索引:

 

         columns關鍵字就可以重新索引列。

        

         通過本文的學習,你是否學會了reindex的用法?

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章