溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

pandas中DataFrame如何查詢

發(fā)布時(shí)間:2021-08-04 09:55:22 來(lái)源:億速云 閱讀:156 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹pandas中DataFrame如何查詢,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

首先,還是列出一個(gè)我們用的DataFrame,注意index一列,如下:

pandas中DataFrame如何查詢

接下來(lái),介紹下各個(gè)函數(shù)的用法:

1、loc函數(shù)

愿意看官方文檔的,請(qǐng)戳這里,這里一般最權(quán)威。
loc函數(shù)是基于“標(biāo)簽”選擇數(shù)據(jù)的,但是也可以接受一個(gè)boolean的array,對(duì)于每個(gè)用法,我們從參數(shù)方面來(lái)一一舉例:

1.1 單個(gè)label

接受一個(gè)“標(biāo)簽”(label)參數(shù),返回一個(gè)Series,例如下面這個(gè)例子收一個(gè)標(biāo)簽,返回通過(guò)這個(gè)標(biāo)簽定位的行的值,注意這里是通過(guò)標(biāo)簽定位,而不是通過(guò)中括號(hào)中的數(shù)字定位第幾行,之后我們通過(guò)對(duì)比iloc函數(shù)時(shí)還會(huì)細(xì)說(shuō)。

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è)對(duì)應(yīng)的DataFrame:

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

結(jié)果如下:

pandas中DataFrame如何查詢

1.3 加入一個(gè)切片array

test_dict_df.loc[[1:4]]

結(jié)果如下:

pandas中DataFrame如何查詢

1.4 行標(biāo)簽,列標(biāo)簽

通過(guò)在中括號(hào)中加入行標(biāo)簽和列標(biāo)簽來(lái)定位一個(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)行選擇

例如我們選擇英語(yǔ)成績(jī)超過(guò)90的所有行:

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

pandas中DataFrame如何查詢

當(dāng)然,也可以再條件選擇后,再加入列選擇,列選擇的時(shí)候可以單列,也可以是切片數(shù)組,通過(guò)上面的介紹這里就可以靈活處理:

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ù)合列,寫(xiě)法也是不同的,具體就可以查閱官方文檔了!

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ū)的數(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是用來(lái)選擇單個(gè)值的,此時(shí)用法類似于loc:

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

以上兩種方法都能選擇到,label為1,列為'english'的那個(gè)值,但是據(jù)說(shuō)at速度要快,這點(diǎn)我沒(méi)有考證過(guò)。

5、iat函數(shù)

iat函數(shù)相對(duì)于at函數(shù),就相當(dāng)于iloc相對(duì)于loc函數(shù)。iat也只能選擇一個(gè)值。只不過(guò)是用索引位置來(lái)選擇,注意:行列都是索引位置來(lái)選擇,從0開(kāi)始數(shù)。

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

6、概括一下

最后我們概括一下:

1、 loc和iloc函數(shù)都是用來(lái)選擇某行的,iloc與loc的不同是:iloc是按照行索引所在的位置來(lái)選取數(shù)據(jù),參數(shù)只能是整數(shù)。而loc是按照索引名稱來(lái)選取數(shù)據(jù),參數(shù)類型依索引類型而定;

2、 at和iat函數(shù)是只能選擇某個(gè)位置的值,iat是按照行索引和列索引的位置來(lái)選取數(shù)據(jù)的。而at是按照行索引和列索引來(lái)選取數(shù)據(jù);

3、 loc和iloc函數(shù)的功能包含at和iat函數(shù)的功能。

以上是“pandas中DataFrame如何查詢”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI