pandas DataFrame的查詢方法(loc,iloc,at,iat,ix的用法和區別)

pandas DataFrame的增刪查改總結系列文章:html

在操做DataFrame時,確定會常常用到loc,iloc,at等函數,各個函數看起來差很少,可是仍是有不少區別的,咱們一塊兒來看下吧。python

首先,仍是列出一個咱們用的DataFrame,注意index一列,以下:git

接下來,介紹下各個函數的用法:github

一、loc函數

願意看官方文檔的,請戳這裏,這裏通常最權威。
loc函數是基於「標籤」選擇數據的,可是也能夠接受一個boolean的array,對於每一個用法,咱們從參數方面來一一舉例:數組

1.1 單個label

接受一個「標籤」(label)參數,返回一個Series,例以下面這個例子收一個標籤,返回經過這個標籤訂位的行的值,注意這裏是經過標籤訂位,而不是經過中括號中的數字定位第幾行,以後咱們經過對比iloc函數時還會細說。函數

test_dict_df.loc[1] #return the row with name 'Bob'
test_dict_df.loc[7] #return the row with name 'Time' important!!!
# type(test_dict_df.loc[1]) #pandas.core.series.Series

1.2 一個label的array

若是鍵入一個標籤的array,那麼就返回一個對應的DataFrame:spa

test_dict_df.loc[[1,2,4]]

結果以下:
3d

1.3 加入一個切片array

test_dict_df.loc[[1:4]]

結果以下:
code

1.4 行標籤,列標籤

經過在中括號中加入行標籤和列標籤來定位一個cell,至關於座標的定位:htm

test_dict_df.loc[1,'english']  #result:94

1.5 行標籤或者列標籤是切片array

test_dict_df.loc[1:4,'english']
# test_dict_df.loc[1:4,'english':'math']

1.6 還能夠接受條件,進行選擇

例如咱們選擇英語成績超過90的全部行:

test_dict_df.loc[test_dict_df['english']>90]

固然,也能夠再條件選擇後,再加入列選擇,列選擇的時候能夠單列,也能夠是切片數組,經過上面的介紹這裏就能夠靈活處理:

test_dict_df.loc[test_dict_df['english']>90,'english'] #single label
test_dict_df.loc[test_dict_df['english']>90,'english':'name'] #slice array
test_dict_df.loc[test_dict_df['english']>90,['english','name']] #label array

1.7 接受一個boolean的array

能夠接受一個boolean的array,至關於按照這個表的真假按照位置的順序選擇值

test_dict_df.loc[[True,False,False,True]]

loc還有不少用法,這裏先介紹到這裏吧,固然若是你的DataFrame是複合的行或者複合列,寫法也是不一樣的,具體就能夠查閱官方文檔了!

二、iloc函數

官方文檔戳這裏
iloc函數與loc函數不一樣的是,它接受的是一個數字,表明着要選擇數據的位置:

test_dict_df.iloc[6]

這表明咱們選擇的是第6行,而不是index爲6的那一行。固然,也能夠接受一個boolean的array,至關於按照這個表的真假按照位置的順序選擇值:

test_dict_df.iloc[[True,False,False,True]]

這裏iloc也能夠接受切片array:

# test_dict_df.iloc[1:2]
test_dict_df.iloc[[1,2,4]]

三、ix函數(0.20.0版本後已經棄用)

ix就是一種混合索引,字符串的標籤和證書的數據索引均可以做爲合法輸入,其實至關於loc和iloc的一個混合方法:

test_dict_df.ix['Alice']
test_dict_df.ix[1]

上述兩種方法都能獲得值,這裏咱們就不追究這個函數具體是怎樣的檢索順序或者工做原理了。由於官方給出的是從pandas0.20.0以後,ix函數已經被棄用。其實在使用的時候,ix函數雖然方便,可是的確有時候會顯得比較混亂,因此咱們以後也儘可能少用這個函數吧,仍是按照官方大佬的指導。

四、at函數

at是用來選擇單個值的,此時用法相似於loc:

test_dict_df.at[1,'english']
test_dict_df.loc[1,'english']

以上兩種方法都能選擇到,label爲1,列爲'english'的那個值,可是聽說at速度要快,這點我沒有考證過。

五、iat函數

iat函數相對於at函數,就至關於iloc相對於loc函數。iat也只能選擇一個值。只不過是用索引位置來選擇,注意:行列都是索引位置來選擇,從0開始數。

# test_dict_df.iat[1,'english'] #error!!!
test_dict_df.iat[2,2] #right!!!

六、歸納一下

最後咱們歸納一下:
一、 loc和iloc函數都是用來選擇某行的,iloc與loc的不一樣是:iloc是按照行索引所在的位置來選取數據,參數只能是整數。而loc是按照索引名稱來選取數據,參數類型依索引類型而定;
二、 at和iat函數是隻能選擇某個位置的值,iat是按照行索引和列索引的位置來選取數據的。而at是按照行索引和列索引來選取數據;
三、 loc和iloc函數的功能包含at和iat函數的功能。

相應的代碼鏈接:github代碼 先寫到這裏,若有新的再補充。

相關文章
相關標籤/搜索