<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas三大利器-map、apply、applymap

          共 3165字,需瀏覽 7分鐘

           ·

          2022-03-04 14:09

          實(shí)際工作中,我們?cè)诶?pandas進(jìn)行數(shù)據(jù)處理的時(shí)候,經(jīng)常會(huì)對(duì)數(shù)據(jù)框中的單行、多行(列也適用)甚至是整個(gè)數(shù)據(jù)進(jìn)行某種相同方式的處理,比如將數(shù)據(jù)中的?sex字段將?男替換成1,女替換成0。

          在這個(gè)時(shí)候,很容易想到的是?for循環(huán)。用?for循環(huán)是一種很簡(jiǎn)單、直接的方式,但是運(yùn)行效率很低。本文中介紹了?pandas中的三大利器:?map、apply、applymap?來解決上述同樣的需求。

          • map

          • apply

          • applymap

          —??01?

          模擬數(shù)據(jù)

          通過一個(gè)模擬的數(shù)據(jù)來說明3個(gè)函數(shù)的使用,在這個(gè)例子中學(xué)會(huì)了如何生成各種模擬數(shù)據(jù)。數(shù)據(jù)如下:

          1. import pandas as pd

          2. import numpy as np


          3. boolean = [True, False]

          4. gender = ["男","女"]

          5. color = ["white","black","red"]


          6. # 好好學(xué)習(xí)如何生成模擬數(shù)據(jù):非常棒的例子

          7. # 學(xué)會(huì)使用random模塊中的randint方法


          8. df = pd.DataFrame({"height":np.random.randint(160,190,100),

          9. "weight":np.random.randint(60,90,100),

          10. "smoker":[boolean[x] for x in np.random.randint(0,2,100)],

          11. "gender":[gender[x] for x in np.random.randint(0,2,100)],

          12. "age":np.random.randint(20,60,100),

          13. "color":[color[x] for x in np.random.randint(0,len(color),100)]

          14. })

          15. df.head()

          —??02?

          map

          demo

          map()?會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。

          第一個(gè)參數(shù) function 以參數(shù)序列中的每一個(gè)元素調(diào)用 function 函數(shù),返回包含每次 function 函數(shù)返回值的新列表。

          1. map(function, iterable)

          實(shí)際數(shù)據(jù)

          將gender中男變成1,女變成0

          1. # 方式1:通過字典映射實(shí)現(xiàn)

          2. dic = {"男":1, "女":0} # 通過字典映射

          3. df1 = df.copy() # 副本,不破壞原來的數(shù)據(jù)df

          4. df1["gender"] = df1["gender"].map(dic)

          5. df1


          6. # 方式2:通過函數(shù)實(shí)現(xiàn)

          7. def map_gender(x):

          8. gender = 1 if x == "男" else 0

          9. return gender


          10. df2 = df.copy()

          11. # 將df["gender"]這個(gè)S型數(shù)據(jù)中的每個(gè)數(shù)值傳進(jìn)去

          12. df2["gender"] = df2["gender"].map(map_gender)

          13. df2

          —??03?

          apply

          apply方法的作用原理和?map方法類似,區(qū)別在于?apply能夠傳入功能更為復(fù)雜的函數(shù),可以說?apply是?map的高級(jí)版

          pandas 的?apply()?函數(shù)可以作用于?Series?或者整個(gè)?DataFrame,功能也是自動(dòng)遍歷整個(gè)?Series?或者?DataFrame, 對(duì)每一個(gè)元素運(yùn)行指定的函數(shù)。

          在?DataFrame對(duì)象的大多數(shù)方法中,都會(huì)有?axis這個(gè)參數(shù),它控制了你指定的操作是沿著0軸還是1軸進(jìn)行。?axis=0代表操作對(duì)?columns進(jìn)行,?axis=1代表操作對(duì)?row進(jìn)行

          demo

          1. 上面的數(shù)據(jù)中將age字段的值都減去3,即加上-3

          1. def apply_age(x,bias):

          2. return x + bias


          3. df4 = df.copy()

          4. # df4["age"]當(dāng)做第一個(gè)值傳給apply_age函數(shù),args是第二個(gè)參數(shù)

          5. df4["age"] = df4["age"].apply(apply_age,args=(-3,))

          1. 計(jì)算BMI指數(shù)

          1. # 實(shí)現(xiàn)計(jì)算BMI指數(shù):體重/身高的平方(kg/m^2)

          2. def BMI(x):

          3. weight = x["weight"]

          4. height = x["height"] / 100

          5. BMI = weight / (height **2)


          6. return BMI


          7. df5 = df.copy()

          8. df5["BMI"] = df5.apply(BMI,axis=1) # df5現(xiàn)在就相當(dāng)于BMI函數(shù)中的參數(shù)x;axis=1表示在列上操作

          9. df5

          DataFrame型數(shù)據(jù)的?apply操作總結(jié):

          1. 當(dāng)?axis=0時(shí),對(duì)?每列columns執(zhí)行指定函數(shù);當(dāng)?axis=1時(shí),對(duì)?每行row執(zhí)行指定函數(shù)。

          2. 無論?axis=0還是?axis=1,其傳入指定函數(shù)的默認(rèn)形式均為?Series,可以通過設(shè)置?raw=True傳入?numpy數(shù)組。

          3. 對(duì)每個(gè)Series執(zhí)行結(jié)果后,會(huì)將結(jié)果整合在一起返回(若想有返回值,定義函數(shù)時(shí)需要?return相應(yīng)的值)

          apply實(shí)現(xiàn)需求

          通過apply方法實(shí)現(xiàn)上面的性別轉(zhuǎn)換需求。apply方法中傳進(jìn)來的第一個(gè)參數(shù)一定是函數(shù)

          —??04?

          applymap

          DF數(shù)據(jù)加1

          applymap函數(shù)用于對(duì)DF型數(shù)據(jù)中的每個(gè)元素執(zhí)行相同的函數(shù)操作,比如下面的加1:

          保留2位有效數(shù)字





          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評(píng),電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬(wàn)眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會(huì)做詩(shī)的機(jī)器人?|?給圖片上色?|?預(yù)測(cè)收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水??!?|?一鍵把html網(wǎng)頁(yè)保存為pdf!|??再見PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!


          年度爆款文案

          點(diǎn)閱讀原文,看200個(gè)Python案例!

          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲乱码精品 | 大香蕉777| AV 无码 白丝 软件 | 一级黄色片毛片 | 日逼com|