詳解Pandas的三大利器(map,apply,applymap)
實際工作中,我們在利用 pandas進行數(shù)據(jù)處理的時候,經(jīng)常會對數(shù)據(jù)框中的單行、多行(列也適用)甚至是整個數(shù)據(jù)進行某種相同方式的處理,比如將數(shù)據(jù)中的 sex字段將 男替換成1,女替換成0。
在這個時候,很容易想到的是 for循環(huán)。用 for循環(huán)是一種很簡單、直接的方式,但是運行效率很低。本文中介紹了 pandas中的三大利器: map、apply、applymap 來解決上述同樣的需求。
- map
- apply
- applymap
模擬數(shù)據(jù)
通過一個模擬的數(shù)據(jù)來說明3個函數(shù)的使用,在這個例子中學會了如何生成各種模擬數(shù)據(jù)。數(shù)據(jù)如下:
import pandas as pd import numpy as np boolean = [True, False] gender = ["男","女"] color = ["white","black","red"] # 好好學習如何生成模擬數(shù)據(jù):非常棒的例子 # 學會使用random模塊中的randint方法 df = pd.DataFrame({"height":np.random.randint(160,190,100), "weight":np.random.randint(60,90,100), "smoker":[boolean[x] for x in np.random.randint(0,2,100)], "gender":[gender[x] for x in np.random.randint(0,2,100)], "age":np.random.randint(20,60,100), "color":[color[x] for x in np.random.randint(0,len(color),100)] }) df.head()
1、map
demo
map() 會根據(jù)提供的函數(shù)對指定序列做映射。
第一個參數(shù) function 以參數(shù)序列中的每一個元素調(diào)用 function 函數(shù),返回包含每次 function 函數(shù)返回值的新列表。
map(function, iterable)
實際數(shù)據(jù)
將gender中男變成1,女變成0
# 方式1:通過字典映射實現(xiàn) dic = {"男":1, "女":0} # 通過字典映射 df1 = df.copy() # 副本,不破壞原來的數(shù)據(jù)df df1["gender"] = df1["gender"].map(dic) df1 # 方式2:通過函數(shù)實現(xiàn) def map_gender(x): gender = 1 if x == "男" else 0 return gender df2 = df.copy() # 將df["gender"]這個S型數(shù)據(jù)中的每個數(shù)值傳進去 df2["gender"] = df2["gender"].map(map_gender) df2
2、apply
apply方法的作用原理和 map方法類似,區(qū)別在于 apply能夠傳入功能更為復雜的函數(shù),可以說 apply是 map的高級版
pandas 的 apply() 函數(shù)可以作用于 Series 或者整個 DataFrame,功能也是自動遍歷整個 Series 或者 DataFrame, 對每一個元素運行指定的函數(shù)。
在 DataFrame對象的大多數(shù)方法中,都會有 axis這個參數(shù),它控制了你指定的操作是沿著0軸還是1軸進行。 axis=0代表操作對 列columns進行, axis=1代表操作對 行row進行
demo
上面的數(shù)據(jù)中將age字段的值都減去3,即加上-3
def apply_age(x,bias): ? ? return x + bias df4 = df.copy() # df4["age"]當做第一個值傳給apply_age函數(shù),args是第二個參數(shù) df4["age"] = df4["age"].apply(apply_age,args=(-3,))
計算BMI指數(shù)
# 實現(xiàn)計算BMI指數(shù):體重/身高的平方(kg/m^2) def BMI(x): weight = x["weight"] height = x["height"] / 100 BMI = weight / (height **2) return BMI df5 = df.copy() df5["BMI"] = df5.apply(BMI,axis=1) # df5現(xiàn)在就相當于BMI函數(shù)中的參數(shù)x;axis=1表示在列上操作 df5
DataFrame型數(shù)據(jù)的 apply操作總結(jié):
- 當 axis=0時,對 每列columns執(zhí)行指定函數(shù);當 axis=1時,對 每行row執(zhí)行指定函數(shù)。
- 無論 axis=0還是 axis=1,其傳入指定函數(shù)的默認形式均為 Series,可以通過設(shè)置 raw=True傳入 numpy數(shù)組。
- 對每個Series執(zhí)行結(jié)果后,會將結(jié)果整合在一起返回(若想有返回值,定義函數(shù)時需要 return相應的值)
apply實現(xiàn)需求
通過apply方法實現(xiàn)上面的性別轉(zhuǎn)換需求。apply方法中傳進來的第一個參數(shù)一定是函數(shù)
3、applymap
DF數(shù)據(jù)加1
applymap函數(shù)用于對DF型數(shù)據(jù)中的每個元素執(zhí)行相同的函數(shù)操作,比如下面的加1:
保留2位有效數(shù)字
到此這篇關(guān)于詳解Pandas的三大利器(map,apply,applymap)的文章就介紹到這了,更多相關(guān)Pandas map apply applymap內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python讀取文本中數(shù)據(jù)并轉(zhuǎn)化為DataFrame的實例
下面小編就為大家分享一篇python讀取文本中數(shù)據(jù)并轉(zhuǎn)化為DataFrame的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04pytest自動化測試數(shù)據(jù)驅(qū)動yaml/excel/csv/json
這篇文章主要為大家介紹了pytest自動化測試數(shù)據(jù)驅(qū)動yaml/excel/csv/json的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06如何向scrapy中的spider傳遞參數(shù)的幾種方法
這篇文章主要介紹了如何向scrapy中的spider傳遞參數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11使用已經(jīng)得到的keras模型識別自己手寫的數(shù)字方式
這篇文章主要介紹了使用已經(jīng)得到的keras模型識別自己手寫的數(shù)字方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06