新聞中心
在日常處理數(shù)據(jù)的過程中,會經(jīng)常遇到這樣的情況,對一個DataFrame進行逐行、逐列或者逐元素的操作,很多小伙伴也知道需要用到apply、map或者applymap,但是具體什么情況下運用哪種方法或者說對這些方法了解不夠,用起來暈暈乎乎始終沒有很明白,希望這一篇文章能夠幫助有需要的小伙伴弄懂他們之間的區(qū)別,并且在遇到問題的時候能夠很清楚明白用哪個以及該怎樣使用。閑話少敘,我們正式開始吧。

站在用戶的角度思考問題,與客戶深入溝通,找到高昌網(wǎng)站設計與高昌網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務覆蓋高昌地區(qū)。
首先,來個總結
- apply:應用在DataFrame的行或列中,也可以應用到單獨一個Series的每個元素中
- map:應用在單獨一個Series的每個元素中
- applymap:應用在DataFrame的每個元素中
apply
先從apply開始,當然最權威的說明還是要看官方文檔:
apply是沿DataFrame的軸應用功能,傳遞給函數(shù)的對象是Series對象,其索引為DataFrame的索引(axis = 0'')或DataFrame的列(axis = 1'')
當然比較常用的還是DataFrame.apply(),下邊我們通過例子來說明一下幫助理解.
首先有一個表:
apply應用到DataFrame中
如果我們求一下每一列或者每一列的極差,注意axis參數(shù)的設置,一般默認為0,即求每一列的極值
apply的參數(shù)可以直接接收現(xiàn)成的函數(shù),也可以接收自定義函數(shù),比如自定義的匿名函數(shù):
通過對軸信息的設置,也可以求每一行的極差:
需要注意的是結果的索引,能夠很明顯的告訴大家現(xiàn)在求的是行極差還是列極差,如果是行極差,索引是行標簽,如果是列極差,索引是列名。
另外,對整個DataFrame運用apply的時候,要保證所有的字段都是符合作為參數(shù)的函數(shù)要求才可以,比如在列子中求極值得保證所有字段都是數(shù)值型才行,如果整個DataFrame不能滿足要求,可以把符合要求的字段切出來再應用apply。
如果有需要,也可以把求的結果添加到原表當中。
apply應用到Series中
如這個例子,將A列的所有元素轉(zhuǎn)換數(shù)據(jù)類型,從整型轉(zhuǎn)換成浮點型:
總結一下,apply運用到整個DataFrame中可以執(zhí)行整列或者整行的運算,運用到Series中,執(zhí)行的是對每個元素的運算。
這個運算,map也可以實現(xiàn)。
map
首先,還是看下官方文檔是怎么說的:
- 根據(jù)輸入對應關系映射Series的值。
- 用于將Series中的每個值替換為另一個值,該值可以從函數(shù)dict或Series派生。
官方指定,map是應用于Seriesd 的,參數(shù)可以是函數(shù)也可以字典。
首先,還是要有一個表:
現(xiàn)在需要將性別轉(zhuǎn)換成0和1,女為0,男為1,這個時候千萬不要寫循環(huán)啊,map()可以輕松實現(xiàn),先來試試函數(shù)的形式:
def gender(x): G = 1 if x == "男" else 0 return G
map的參數(shù)除了可以是參數(shù),也可以是字典,這和apply對參數(shù)的要求不同:
applymap
最后來看一下applymap,還是先搬上官方文檔:
- 將函數(shù)應用于元素的數(shù)據(jù)框。
- 此方法應用一個函數(shù),該函數(shù)接受并返回一個標量到DataFrame的每個元素。
簡單說,applymap是把函數(shù)應用到DataFrame中的每個元素上的,要和apply對整列或者整行進行的操作區(qū)分開啊,apply想要直接對每個元素進行操作,得單獨提取出Series才可以實現(xiàn),不能直接再整個DataFrame上執(zhí)行。下邊來看個例子。
還是開頭的那個表:
現(xiàn)在要把每個元素的數(shù)據(jù)類型都轉(zhuǎn)換成浮點型,applymap()就派上用場了:
最后再總結一下:
apply:
- 既可以用在DataFrame,也可以用到單獨的Series中
- 運用到DataFrame時,是用到了整行或者整列上,不是逐一運用到每個元素上
- 運用到Series時,作用到每個元素上
- 第一個參數(shù)只接收python原生函數(shù)或者numpy中的函數(shù)
map
- 只能運用到Series的每個元素上
- 參數(shù)可以是函數(shù)也可以是字典,還可以是序列
applymap
- 只能應用在DataFrame中,并且是作用在DataFrame的每個元素中
- 參數(shù)只接收可調(diào)用的函數(shù)
常用的用法呢就是前邊舉的例子中的那些了,希望這邊文章能幫助大家分清apply、map和applymap并能靈活運用它們。
本文標題:一文弄懂Apply、Map和Aplymap三種函數(shù)的區(qū)別
轉(zhuǎn)載注明:http://www.dlmjj.cn/article/ccsojsd.html


咨詢
建站咨詢
