pandas DataFrame的增刪查改總結系列文章:html
在操做DataFrame時,確定會常常用到loc,iloc,at等函數,各個函數看起來差很少,可是仍是有不少區別的,咱們一塊兒來看下吧。python
首先,仍是列出一個咱們用的DataFrame,注意index一列,以下:git
接下來,介紹下各個函數的用法:github
願意看官方文檔的,請戳這裏,這裏通常最權威。
loc函數是基於「標籤」選擇數據的,可是也能夠接受一個boolean的array,對於每一個用法,咱們從參數方面來一一舉例:數組
接受一個「標籤」(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
若是鍵入一個標籤的array,那麼就返回一個對應的DataFrame:spa
test_dict_df.loc[[1,2,4]]
結果以下:
3d
test_dict_df.loc[[1:4]]
結果以下:
code
經過在中括號中加入行標籤和列標籤來定位一個cell,至關於座標的定位:htm
test_dict_df.loc[1,'english'] #result:94
test_dict_df.loc[1:4,'english'] # test_dict_df.loc[1:4,'english':'math']
例如咱們選擇英語成績超過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
能夠接受一個boolean的array,至關於按照這個表的真假按照位置的順序選擇值
test_dict_df.loc[[True,False,False,True]]
loc還有不少用法,這裏先介紹到這裏吧,固然若是你的DataFrame是複合的行或者複合列,寫法也是不一樣的,具體就能夠查閱官方文檔了!
官方文檔戳這裏。
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就是一種混合索引,字符串的標籤和證書的數據索引均可以做爲合法輸入,其實至關於loc和iloc的一個混合方法:
test_dict_df.ix['Alice'] test_dict_df.ix[1]
上述兩種方法都能獲得值,這裏咱們就不追究這個函數具體是怎樣的檢索順序或者工做原理了。由於官方給出的是從pandas0.20.0以後,ix函數已經被棄用。其實在使用的時候,ix函數雖然方便,可是的確有時候會顯得比較混亂,因此咱們以後也儘可能少用這個函數吧,仍是按照官方大佬的指導。
at是用來選擇單個值的,此時用法相似於loc:
test_dict_df.at[1,'english'] test_dict_df.loc[1,'english']
以上兩種方法都能選擇到,label爲1,列爲'english'的那個值,可是聽說at速度要快,這點我沒有考證過。
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代碼 先寫到這裏,若有新的再補充。