pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

該號剛出生不久,喜歡的朋友別忘了點個關注。

在Python數據分析實務中,經常會需要選取整個數據集的某些子集進行分析。選取的方法多種多樣,有簡單也有複雜。今天,我們就藉助pandas中最常見的數據結構Series,來對比一下.loc[]與.iloc[]的選取方法。

.loc[]方法

該方法是通過索引的標籤名稱來達到對成員的選取。我們可以構造一個簡單的Series來見證一下:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

假如我們要選取索引為“b”的成員,則可以為:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

若需要選取連續多個成員,則可以做類似切片的寫法進行操作:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

然而需要指出的是,這裡和真正的位置型切片索引(下面的iloc[]就屬於)不同的是,它是左右均閉合的,即最終返回的結果,是包含從索引b開始直到索引d結束的所有連續成員。

而如果我們要選取多個不連續成員,則可以傳遞列表進來:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

需要說明的是,下面的這種寫法是錯誤的,因為它傳遞進來的不是一個列表,而是兩個獨立的字符串,Series暫時不接受這種狂放的寫法:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

另外,如果我想選取位置索引為3的成員,可否直接傳遞個3進去呢。我們來試一試:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

答案是不行的(當然,如果你的索引不是這些字母,而是一堆整數,那麼也是可以的。因為這種情況下,這些整數索引,就可以當做是索引的標籤名稱),這是下面的方法來做的事兒。

.iloc[]方法

該方法就是用從0開始的整數型位置來對成員進行索引,我們可以這樣說,這種選取方式,實際上和索引(index)無關,只和成員的空間位置有關。

還是上面那個Series,我們要選取其第一個成員,就可以如下:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

這種選取方式是從0開始的,這是Python,同時也是大多數編程語言在索引上的一種約定俗成。

若是要取連續多個成員,可以用類似列表的形式來寫:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

需要注意的是,這種選取方式與.loc[]不同,它是左閉右開的,也就是0代表的成員包含在內,而4代表的成員Luke則不包含在內。

另外,選取多個不連續成員,與上面方法類似的,也是傳入一個列表,只是這個列表的元素是一堆整數:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

同樣的,把最外層的方括號去掉,則相當於傳遞了兩個整數進去,這種方法也是會報錯的:

pandas基礎知識裡的大學問,Series中.loc「]與.iloc[」選取對比

總結一下,.loc[]方法傳遞參數時,參數或者參數的成員代表的均是Series索引的標籤;而.iloc[]方法中,則代表的是Series成員所在的空間位置。


分享到:


相關文章: