站長資訊網
        最全最豐富的資訊網站

        pandas技巧之 詳解DataFrame中的apply與applymap方法

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        相關學習推薦:python視頻教程

        今天是pandas數據處理專題的第5篇文章,我們來聊聊pandas的一些高級運算。

        在上一篇文章當中,我們介紹了panads的一些計算方法,比如兩個dataframe的四則運算,以及dataframe填充Null的方法。今天這篇文章我們來聊聊dataframe中的廣播機制,以及apply函數的使用方法。

        dataframe廣播

        廣播機制我們其實并不陌生, 我們在之前介紹numpy的專題文章當中曾經介紹過廣播。當我們對兩個尺寸不一致的數組進行運算的時候,系統會自動將其中維度較小的那個填充成和另外一個一樣再進行計算。

        比如我們將一個二維數組減去一個一維數組,numpy會先將一位數組拓展到二維之后再進行減法運算。看起來就像是二維數組的每一行分別減去了這一個一維數組一樣。可以理解成我們將減去這一個一維數組的操作廣播到了二維數組的每一行或者是每一列當中。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        在上面這個例子當中我們創建了一個numpy的數組,然后減去了它的第一行。我們對比下最后的結果會發現,arr數組當中的每一行都減去了它的第一行。

        同樣的操作在dataframe也一樣可以進行。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        我們當然也可以對某一列進行廣播,但是dataframe四則運算的廣播機制默認對行生效,如果要對列使用的話,我們需要使用算術運算方法,并且指定希望匹配的軸。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        函數與映射

        pandas的另外一個優點是兼容了numpy當中的一些運算方法和函數,使得我們也可以將一些numpy當中的函數運用在DataFrame上,這樣就大大拓展了使用方法以及運算方法。

        比如我們要將DataFrame當中所有的元素變成它的平方,我們利用numpy的square方法可以很容易做到:

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        我們可以將DataFrame作為numpy函數的參數傳入,但如果我們想要自己定義一個方法并且應用在DataFrame上怎么辦?

        我們可以利用apply方法很容易地實現這一點,apply方法有些像是Python原生的map方法,可以對DataFrame當中的每一個元素做一個映射計算。我們只需要在apply方法當中傳入我們想要應用在DataFrame上的方法即可,也就是說它接受的參數是一個函數,這是一個很典型的函數式編程的應用。

        比如我們想要對DataFrame進行平方操作,我們也可以將np.square函數當做參數傳入。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        apply方法除了可以用在一整個DataFrame上之外,我們也可以讓它應用在某一行或者是某一列或者是某一個部分上,應用的方法都是一樣的。比如我們可以這樣對DataFrame當中的某一行以及某一列應用平方這個方法。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        另外,apply中函數的作用域并不只局限在元素,我們也可以寫出作用在一行或者是一列上的函數。比如我們想要計算出DataFrame當中每一列的最大值,我們可以這樣寫:

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        這個匿名函數當中的x其實是一個Series,那這里的max就是Series自帶的max方法。也就是說apply的作用范圍是Series,雖然最終的效果是每一個元素都被改變了,但是apply的作用域并不是元素而是Series。我們通過apply操作行或者列,行和列將改變應用到每一個元素。

        同樣我們也可以將apply的應用對象限定為行,同樣我們需要通過傳入axis來限定,我們可以傳入axis='columns',也可以指定axis=1,這兩者的效果是一樣的。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        另外,apply返回的結果并不一定只能是標量,也可以是多個值組成的list或者是Series,其實兩者也是一樣的,因為即使返回List也會被轉化成Series。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        最后我們來介紹一下applymap,它是元素級的map,我們可以用它來操作DataFrame中的每一個元素。比如我們可以用它來轉換DataFrame當中數據的格式。

        pandas技巧之  詳解DataFrame中的apply與applymap方法

        之所以我們叫它applymap而不是map,是因為在Series的方法當中,已經有了map,所以為了區分創建了applymap。

        這里要注意,如果將上面代碼中的applymap改成apply是會報錯的。報錯的原因也很簡單,因為apply方法的作用域不是元素而是Series,Series并不支持這樣的操作。

        總結

        今天的文章我們主要介紹了pandas當中apply與applymap的使用方法, 這兩個方法在我們日常操作DataFrame的數據非常常用,可以說是手術刀級的api。熟練掌握對于我們搞定數據處理非常有幫助,如果大家理解Python中原生的map方法的應用,相信一定也可以很順利地理解今天的文章。

        想了解

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 999国产精品色在线播放| 亚洲AV无码成人精品区大在线| 欧美日韩精品久久久久| 国产亚洲色婷婷久久99精品91| 久久精品国产99国产精品| 国产精品1024香蕉在线观看| 国产精品欧美一区二区三区不卡| 亚洲国产精品久久66| 老司机国内精品久久久久| 3级黄性日本午夜精品| 国产精品免费AV片在线观看| 精品久久久久久久无码| 亚洲AV无码国产精品色午友在线| 99久久国语露脸精品国产| 99免费精品国产| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久久久夜夜夜精品国产| 国产精品一区在线观看你懂的| 亚洲精品无码日韩国产不卡?V| 国产精品igao视频网| 久久精品?ⅴ无码中文字幕| 久久精品国产亚洲av麻豆小说 | 成人精品视频一区二区三区| 精品无码国产污污污免费网站国产 | 久久久久免费精品国产| 亚洲精品一品区二品区三品区| 亚洲国产精品第一区二区| 亚洲性日韩精品一区二区三区| 国产精品美女久久久| 日韩精品专区在线影院重磅| 无码AⅤ精品一区二区三区| wwwvr高清亚洲精品二区| 久久久久久国产精品免费无码| 91无码人妻精品一区二区三区L| 999国产精品视频| 亚洲国产精品一区二区成人片国内| 成人精品一区二区三区免费看| 日韩精品系列产品| 黑人巨大精品欧美一区二区| 精品国精品国产自在久国产应用 |