最近,又發(fā)現(xiàn)了Pandas中三個(gè)好用的函數(shù)
導(dǎo)讀
筆者早先學(xué)習(xí)Python以及數(shù)據(jù)分析相關(guān)知識時(shí),對Pandas投入了很多精力,自認(rèn)掌握的還算扎實(shí),期間也總結(jié)分享了很多Pandas相關(guān)技巧和心得(點(diǎn)擊上方“Pandas”標(biāo)簽可以查看系列文章)。近日,在github中查看一些他人提交的代碼時(shí),發(fā)現(xiàn)了Pandas中這三個(gè)函數(shù),在特定場景中著實(shí)好用,遂成此文以作分享。

程序的基本結(jié)構(gòu)大體包含三種,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),其中循環(huán)結(jié)構(gòu)應(yīng)該是最能體現(xiàn)重復(fù)執(zhí)行相同動(dòng)作的代碼控制語句,因此也是最必不可少的一種語法(當(dāng)然,順序和分支也都是必不可少的- -!)。雖然Pandas中提供了很多向量化操作,可以很大程度上避免暴力循環(huán)結(jié)構(gòu)帶來的效率低下,但也不得不承認(rèn)仍有很多情況還是循環(huán)來的簡潔實(shí)在。
因此,為了在Pandas中更好的使用循環(huán)語句,本文重點(diǎn)介紹以下三個(gè)函數(shù):
iteritems
iterrows
itertuples





iteritems的更多文檔部分可自行查看
筆者猜測,可能是在早期items確實(shí)以列表形式返回,而后來優(yōu)化升級為以迭代器形式返回了。不過在pandas文檔中簡單查閱,并未找到相關(guān)描述。
那么,說了這么多,iteritems到底有什么用呢?我個(gè)人總結(jié)為如下幾個(gè)方面:
方便的以(columnName, Series)元組對的形式逐一遍歷各行進(jìn)行相應(yīng)操作
以迭代器的形式返回,在DataFrame數(shù)據(jù)量較大時(shí)內(nèi)存占用更為高效
另外,items是iteritems的同名函數(shù),二者在功能上目前已無差別
在前面介紹了iteritems的基礎(chǔ)上,這里介紹iterrows就更加簡單了。如果說iteritems是對各列進(jìn)行遍歷并以迭代器返回鍵值對,那么iterrows則是對各行進(jìn)行遍歷,并逐行返回(行索引,行)的信息。


這里仍然顯式轉(zhuǎn)化為list輸出


示例DataFrame的各列信息
那么,如果想要保留DataFrame中各列的原始數(shù)據(jù)類型時(shí),該如何處理呢?這就需要下面的itertuples。

實(shí)際上,namedtuple是一個(gè)繼承自tuple的子類,區(qū)別在于namedtuple除了可以使用索引來訪問各元素取值外,還支持以各位置的'name'來訪問元素(類似于C語言中的結(jié)構(gòu)體類型),或者說namedtuple可以很方便的無縫轉(zhuǎn)換為dict。


其中,返回值包含5個(gè)namedtuple,這里每個(gè)namedtuple都被命名為Pandas,這可以通過itertuples中的name參數(shù)加以修改;另外,注意到在每個(gè)namedtuple都包含了4個(gè)元素,除了A、B、C三個(gè)列取值外,還以index的形式返回了行索引信息,這可以通過itertuples中的index參數(shù)設(shè)置保留或舍棄。
由于行索引作為namedtuple中可選的一部分信息,所以與iteritems和iterrows不同,這里的返回值不再以元組隊(duì)的形式顯示行索引信息。
以上就是本文分享的Pandas中三個(gè)好用的函數(shù),其使用方法大體相同,并均以迭代器的形式返回遍歷結(jié)果,這對數(shù)據(jù)量較大時(shí)是尤為友好和內(nèi)存高效的設(shè)計(jì)。對于具體功能而言:
iteritems是面向列的迭代設(shè)計(jì),items函數(shù)的功能目前與其相同;
iterrows和itertuples都是面向行的迭代設(shè)計(jì),其中iterrows以元組對的形式返回,但返回的各行Series可能無法保留原始數(shù)據(jù)結(jié)構(gòu)類型;而itertuples則以namedtuple形式返回各行信息,行索引不再單獨(dú)顯示而是作為namedtuple中的一項(xiàng),并可通過itertuples參數(shù)加以設(shè)置是否保留。

相關(guān)閱讀:
