<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中的transform

          共 2422字,需瀏覽 5分鐘

           ·

          2020-10-15 22:14

          點(diǎn)擊上方"藍(lán)字"關(guān)注我們





          Python大數(shù)據(jù)分析


          記錄? ?分享? ?成長(zhǎng)


          添加微信號(hào)"CNFeffery"加入技術(shù)交流群
          ?

          本文示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

          ?

          1 簡(jiǎn)介

          開門見山,在pandas中,transform是一類非常實(shí)用的方法,通過它我們可以很方便地將某個(gè)或某些函數(shù)處理過程(非聚合)作用在傳入數(shù)據(jù)的每一列上,從而返回與輸入數(shù)據(jù)形狀一致的運(yùn)算結(jié)果。

          本文就將帶大家掌握pandas中關(guān)于transform的一些常用使用方式。

          圖1

          2 pandas中的transform

          pandastransform根據(jù)作用對(duì)象和場(chǎng)景的不同,主要可分為以下幾種:

          2.1 transform作用于Series

          當(dāng)transform作用于單列Series時(shí)較為簡(jiǎn)單,以前段時(shí)間非常流行的「企鵝數(shù)據(jù)集」為例:

          圖2

          我們?cè)谧x入數(shù)據(jù)后,對(duì)bill_length_mm列進(jìn)行transform變換:

          • 「單個(gè)變換函數(shù)」

          我們可以傳入任意的非聚合類函數(shù),譬如對(duì)數(shù)化:

          #?對(duì)數(shù)化
          penguins['bill_length_mm'].transform(np.log)
          圖3

          或者傳入「lambda」函數(shù):

          #?lambda函數(shù)
          penguins['bill_length_mm'].transform(lambda?s:?s+1)
          圖4
          • 「多個(gè)變換函數(shù)」

          也可以傳入包含多個(gè)變換函數(shù)的「列表」來一口氣計(jì)算出多列結(jié)果:

          penguins['bill_length_mm'].transform([np.log,?
          ??????????????????????????????????????lambda?s:?s+1,?
          ??????????????????????????????????????np.sqrt])
          圖5

          而又因?yàn)?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;overflow-wrap: break-word;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">transform傳入的函數(shù),在執(zhí)行運(yùn)算時(shí)接收的輸入?yún)?shù)是對(duì)應(yīng)的「整列數(shù)據(jù)」,所以我們可以利用這個(gè)特點(diǎn)實(shí)現(xiàn)諸如「數(shù)據(jù)標(biāo)準(zhǔn)化」「歸一化」等需要依賴樣本整體統(tǒng)計(jì)特征的變換過程:

          #?利用transform進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化
          penguins['bill_length_mm'].transform(lambda?s:?(s?-?s.mean())?/?s.std())
          圖6

          2.2 transform作用于DataFrame

          當(dāng)transform作用于整個(gè)DataFrame時(shí),實(shí)際上就是將傳入的所有變換函數(shù)作用到每一列中:

          #?分別對(duì)每列進(jìn)行標(biāo)準(zhǔn)化
          (
          ????penguins
          ????.loc[:,?'bill_length_mm':?'body_mass_g']
          ????.transform(lambda?s:?(s?-?s.mean())?/?s.std())
          )
          圖7

          而當(dāng)傳入多個(gè)變換函數(shù)時(shí),對(duì)應(yīng)的返回結(jié)果格式類似agg中的機(jī)制,會(huì)生成MultiIndex格式的字段名:

          (
          ????penguins
          ????.loc[:,?'bill_length_mm':?'body_mass_g']
          ????.transform([np.log,?lambda?s:?s+1])
          )
          圖8

          而且由于作用的是DataFrame,還可以利用字典以鍵值對(duì)的形式,一口氣為每一列配置單個(gè)或多個(gè)變換函數(shù):

          #?根據(jù)字典為不同的列配置不同的變換函數(shù)
          (
          ????penguins
          ????.loc[:,?'bill_length_mm':?'body_mass_g']
          ????.transform({'bill_length_mm':?np.log,
          ????????????????'bill_depth_mm':?lambda?s:?(s?-?s.mean())?/?s.std(),
          ????????????????'flipper_length_mm':?np.log,
          ????????????????'body_mass_g':?[np.log,?np.sqrt]})
          )
          圖9

          2.3 transform作用于DataFrame的分組過程

          在對(duì)DataFrame進(jìn)行分組操作時(shí),配合transform可以完成很多有用的任務(wù),譬如對(duì)缺失值進(jìn)行填充時(shí),根據(jù)分組內(nèi)部的均值進(jìn)行填充:

          #?分組進(jìn)行缺失值均值填充
          (
          ????penguins
          ????.groupby('species')[['bill_length_mm',?'bill_depth_mm',?
          ?????????????????????????'flipper_length_mm',?'body_mass_g']]
          ????.transform(lambda?s:?s.fillna(s.mean().round(2)))
          )
          圖10

          并且在pandas1.1.0版本之后為transform引入了新特性,可以配合CythonNumba來實(shí)現(xiàn)更高性能的數(shù)據(jù)變換操作,詳細(xì)的可以閱讀( https://github.com/pandas-dev/pandas/pull/32854 )了解更多。

          除了以上介紹的內(nèi)容外,transform還可以配合時(shí)間序列類的操作譬如resample等,功能都大差不差,感興趣的朋友可以自行了解。


          以上就是本文的全部?jī)?nèi)容,歡迎在評(píng)論區(qū)與我進(jìn)行討論~

          加入我們的知識(shí)星球【Python大數(shù)據(jù)分析】

          愛上數(shù)據(jù)分析!




          · 往期精選 ·
          1

          Python 3.9,來了!

          2

          geopandas輕松疊加在線底圖

          3

          在pandas中利用hdf5高效存儲(chǔ)數(shù)據(jù)




          Python大數(shù)據(jù)分析

          data creates?value

          掃碼關(guān)注我們

          瀏覽 53
          點(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>
                  一级日本在线 | 中文无码网站 | 国产高清无码在线 | 久久久视频在线观看 | 91探花秘 在线播放 |