詳解pandas DataFrame的查詢方法(loc,iloc,at,iat,ix的用法和區(qū)別)
在操作DataFrame時(shí),肯定會(huì)經(jīng)常用到loc,iloc,at等函數(shù),各個(gè)函數(shù)看起來差不多,但是還是有很多區(qū)別的,我們一起來看下吧。
首先,還是列出一個(gè)我們用的DataFrame,注意index一列,如下:
接下來,介紹下各個(gè)函數(shù)的用法:
1、loc函數(shù)
愿意看官方文檔的,請戳這里,這里一般最權(quán)威。
loc函數(shù)是基于“標(biāo)簽”選擇數(shù)據(jù)的,但是也可以接受一個(gè)boolean的array,對于每個(gè)用法,我們從參數(shù)方面來一一舉例:
1.1 單個(gè)label
接受一個(gè)“標(biāo)簽”(label)參數(shù),返回一個(gè)Series,例如下面這個(gè)例子收一個(gè)標(biāo)簽,返回通過這個(gè)標(biāo)簽定位的行的值,注意這里是通過標(biāo)簽定位,而不是通過中括號中的數(shù)字定位第幾行,之后我們通過對比iloc函數(shù)時(shí)還會(huì)細(xì)說。
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 一個(gè)label的array
如果鍵入一個(gè)標(biāo)簽的array,那么就返回一個(gè)對應(yīng)的DataFrame:
test_dict_df.loc[[1,2,4]]
結(jié)果如下:
1.3 加入一個(gè)切片array
test_dict_df.loc[[1:4]]
結(jié)果如下:
1.4 行標(biāo)簽,列標(biāo)簽
通過在中括號中加入行標(biāo)簽和列標(biāo)簽來定位一個(gè)cell,相當(dāng)于坐標(biāo)的定位:
test_dict_df.loc[1,'english'] #result:94
1.5 行標(biāo)簽或者列標(biāo)簽是切片array
test_dict_df.loc[1:4,'english'] # test_dict_df.loc[1:4,'english':'math']
1.6 還可以接受條件,進(jìn)行選擇
例如我們選擇英語成績超過90的所有行:
test_dict_df.loc[test_dict_df['english']>90]
當(dāng)然,也可以再條件選擇后,再加入列選擇,列選擇的時(shí)候可以單列,也可以是切片數(shù)組,通過上面的介紹這里就可以靈活處理:
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 接受一個(gè)boolean的array
可以接受一個(gè)boolean的array,相當(dāng)于按照這個(gè)表的真假按照位置的順序選擇值
test_dict_df.loc[[True,False,False,True]]
loc還有很多用法,這里先介紹到這里吧,當(dāng)然如果你的DataFrame是復(fù)合的行或者復(fù)合列,寫法也是不同的,具體就可以查閱官方文檔了!
2、iloc函數(shù)
官方文檔戳這里。
iloc函數(shù)與loc函數(shù)不同的是,它接受的是一個(gè)數(shù)字,代表著要選擇數(shù)據(jù)的位置:
test_dict_df.iloc[6]
這代表我們選擇的是第6行,而不是index為6的那一行。當(dāng)然,也可以接受一個(gè)boolean的array,相當(dāng)于按照這個(gè)表的真假按照位置的順序選擇值:
test_dict_df.iloc[[True,False,False,True]]
這里iloc也可以接受切片array:
# test_dict_df.iloc[1:2] test_dict_df.iloc[[1,2,4]]
3、ix函數(shù)(0.20.0版本后已經(jīng)棄用)
ix就是一種混合索引,字符串的標(biāo)簽和證書的數(shù)據(jù)索引都可以作為合法輸入,其實(shí)相當(dāng)于loc和iloc的一個(gè)混合方法:
test_dict_df.ix['Alice'] test_dict_df.ix[1]
上述兩種方法都能得到值,這里我們就不追究這個(gè)函數(shù)具體是怎樣的檢索順序或者工作原理了。因?yàn)楣俜浇o出的是從pandas0.20.0之后,ix函數(shù)已經(jīng)被棄用。其實(shí)在使用的時(shí)候,ix函數(shù)雖然方便,但是的確有時(shí)候會(huì)顯得比較混亂,所以我們之后也盡量少用這個(gè)函數(shù)吧,還是按照官方大佬的指導(dǎo)。
4、at函數(shù)
at是用來選擇單個(gè)值的,此時(shí)用法類似于loc:
test_dict_df.at[1,'english'] test_dict_df.loc[1,'english']
以上兩種方法都能選擇到,label為1,列為'english'的那個(gè)值,但是據(jù)說at速度要快,這點(diǎn)我沒有考證過。
5、iat函數(shù)
iat函數(shù)相對于at函數(shù),就相當(dāng)于iloc相對于loc函數(shù)。iat也只能選擇一個(gè)值。只不過是用索引位置來選擇,注意:行列都是索引位置來選擇,從0開始數(shù)。
# test_dict_df.iat[1,'english'] #error!!! test_dict_df.iat[2,2] #right!!!
6、概括一下
最后我們概括一下:
1、 loc和iloc函數(shù)都是用來選擇某行的,iloc與loc的不同是:iloc是按照行索引所在的位置來選取數(shù)據(jù),參數(shù)只能是整數(shù)。而loc是按照索引名稱來選取數(shù)據(jù),參數(shù)類型依索引類型而定;
2、 at和iat函數(shù)是只能選擇某個(gè)位置的值,iat是按照行索引和列索引的位置來選取數(shù)據(jù)的。而at是按照行索引和列索引來選取數(shù)據(jù);
3、 loc和iloc函數(shù)的功能包含at和iat函數(shù)的功能。
相應(yīng)的代碼連接:github代碼
先寫到這里,如有新的再補(bǔ)充。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python pymysql連接數(shù)據(jù)庫并將查詢結(jié)果轉(zhuǎn)化為Pandas dataframe
- Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作
- python將Dataframe格式的數(shù)據(jù)寫入opengauss數(shù)據(jù)庫并查詢
- python pymysql鏈接數(shù)據(jù)庫查詢結(jié)果轉(zhuǎn)為Dataframe實(shí)例
- 淺談pandas中Dataframe的查詢方法([], loc, iloc, at, iat, ix)
- DataFrame數(shù)據(jù)框模糊查詢與去重方式
相關(guān)文章
Python基礎(chǔ)知識+結(jié)構(gòu)+數(shù)據(jù)類型
這篇文章主要介紹了Python基礎(chǔ)知識+結(jié)構(gòu)+數(shù)據(jù)類型,文章基于python基礎(chǔ)知識圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05Python之批量創(chuàng)建文件的實(shí)例講解
今天小編就為大家分享一篇Python之批量創(chuàng)建文件的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python(PyS60)實(shí)現(xiàn)簡單語音整點(diǎn)報(bào)時(shí)
這篇文章主要為大家詳細(xì)介紹了Python(PyS60)實(shí)現(xiàn)簡單語音整點(diǎn)報(bào)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11利用Python批量導(dǎo)出mysql數(shù)據(jù)庫表結(jié)構(gòu)的操作實(shí)例
這篇文章主要給大家介紹了關(guān)于利用Python批量導(dǎo)出mysql數(shù)據(jù)庫表結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2022-08-08Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解
這篇文章主要介紹了Python尾遞歸優(yōu)化實(shí)現(xiàn)代碼及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10