Python pandas之多級索引取值詳解
最近發(fā)現(xiàn)周圍的很多小伙伴們都不太樂意使用pandas,轉(zhuǎn)而投向其他的數(shù)據(jù)操作庫,身為一個(gè)數(shù)據(jù)工作者,基本上是張口pandas,閉口pandas了,故而寫下此系列以讓更多的小伙伴們愛上pandas。
平臺:
windows 10
python 3.8
pandas 1.2.4
數(shù)據(jù)需求
給定一份多級索引數(shù)據(jù),查找指定值。

需求拆解
數(shù)據(jù)提取在pandas中,或者說在python中就是索引式提取,在單層索引中采用.loc或.iloc方法已經(jīng)非常常見了,然而在索引層次多了之后卻有點(diǎn)不知所措,也只需要將各個(gè)索引看成整體進(jìn)行提取就行。
需求處理
方法一
這里先給出一個(gè)比較笨拙的方法,先將索引進(jìn)行重置為列數(shù)據(jù),通過列取得bool條件再進(jìn)行提取
datac.reset_index(inplace=True) datac[(datac['School'] == 'S_2') & (datac['Class'] == 'C_3')]

可以看到通過該類方法可以成功取到對應(yīng)值
當(dāng)然也可以采用.query方法進(jìn)行條件篩選
datac.reset_index(inplace=True)
datac.query("School == 'S_1' and Class == 'C_3'")

方法二
既然為多級索引,pandas也會有對應(yīng)的取值方式,既可以用鏈?zhǔn)秸{(diào)用的方式,也可以通過元組進(jìn)行提取,首先看看多級索引的輸出值:

是一個(gè)MultiIndex類型數(shù)據(jù),其元素都是元組,即也能通過元組的方式進(jìn)行索引調(diào)取
這兩種都一個(gè)共同的特點(diǎn),從左到右,要先外層再內(nèi)層,否則會報(bào)KeyError錯(cuò)誤
# 鏈?zhǔn)秸{(diào)用
datac.loc['S_1'].loc['C_1']

# 元組作為索引調(diào)用
datac.loc[('S_3', 'C_1'), :]

tips:
1.多層索引,即列名上方有層次結(jié)構(gòu)也可以按這種方式進(jìn)行提取。
2.想越過外層索引提取內(nèi)層索引需要交換索引順序才能順利提取。
# swaplevel 交換索引層級
datac.swaplevel(axis=0).loc[('C_1')] # axis=0: index

總結(jié)
功夫再高,也怕菜刀。本例使用方法比較常規(guī),旨在鞏固基礎(chǔ)知識,當(dāng)下次遇到能夠想起可以直接索引取值而不用將索引重置為列值,以高效完成數(shù)據(jù)提取任務(wù)。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python:__eq__和__str__函數(shù)的使用示例
這篇文章主要介紹了Python:__eq__和__str__函數(shù)的使用示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09
基于Google的Python編碼規(guī)范標(biāo)準(zhǔn)
這篇文章主要介紹了基于Google的Python編碼規(guī)范標(biāo)準(zhǔn),其中包含了分號,行長度,括號,縮進(jìn),空行,空格等基本符號的使用規(guī)則,有需要的朋友可以參考下2021-08-08
python os.path.isfile 的使用誤區(qū)詳解
今天小編就為大家分享一篇python os.path.isfile 的使用誤區(qū)詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
python3圖片轉(zhuǎn)換二進(jìn)制存入mysql
MYSQL是支持把圖片存入數(shù)據(jù)庫的,也相應(yīng)的有一個(gè)專門的字段BLOB (Binary Large Object),即較大的二進(jìn)制對象字段,看下面代碼2013-12-12

