<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>

          再見,Excel數(shù)據(jù)透視表;你好,pd.pivot_table

          共 2158字,需瀏覽 5分鐘

           ·

          2020-12-12 20:00


          導(dǎo)讀

          Excel作為Office常用辦公軟件之一,其在一名數(shù)據(jù)分析師的工作日常中也占有一定地位,比如個(gè)人就常常傾向于依賴Excel完成簡(jiǎn)單的數(shù)據(jù)處理和可視化作圖,其中數(shù)據(jù)處理部分則主要是運(yùn)用內(nèi)置函數(shù)+數(shù)據(jù)透視表兩大部分。

          Excel數(shù)據(jù)透視表雖好,但在pandas面前它也有其不香的一面!




          01 何為透視表
          數(shù)據(jù)透視表,顧名思義,就是通過(guò)對(duì)數(shù)據(jù)執(zhí)行一定的"透視",完成對(duì)復(fù)雜數(shù)據(jù)的分析統(tǒng)計(jì)功能,常常伴隨降維的效果。例如在Excel工具欄數(shù)據(jù)透視表選項(xiàng)卡中通過(guò)懸浮鼠標(biāo)可以看到這樣的描述:


          具體而言,以經(jīng)典的泰坦尼克號(hào)數(shù)據(jù)集(github下載地址為 https://github.com/hitcszq/kaggle_titanic)為例,想要探索不同性別(Sex)和不同艙位等級(jí)(Embarked)下生存人數(shù)(Survived),那么僅需如下3步操作即可:
          • 選擇Excel菜單欄中插入數(shù)據(jù)透視表選項(xiàng)卡


          • 分別拖動(dòng)目標(biāo)字段到相應(yīng)行列位置,設(shè)置統(tǒng)計(jì)函數(shù)為求和


          • 得到統(tǒng)計(jì)好的數(shù)據(jù)透視表結(jié)果


          至此,我們可以發(fā)現(xiàn)數(shù)據(jù)透視表中實(shí)際存在4個(gè)重要的設(shè)置項(xiàng):

          • 行字段

          • 列字段

          • 統(tǒng)計(jì)字段

          • 統(tǒng)計(jì)方式(聚合函數(shù))


          值得指出的是,以上4個(gè)要素每一個(gè)都可以不唯一,例如可以拖動(dòng)多個(gè)字段到行/列字段中形成二級(jí)索引,也可完成對(duì)不同字段的統(tǒng)計(jì),以及拖動(dòng)相同字段設(shè)置不同統(tǒng)計(jì)方法實(shí)現(xiàn)多種聚合。



          02 利用pd.pivot_table實(shí)現(xiàn)
          Pandas作為Python數(shù)據(jù)分析的瑞士軍刀,實(shí)現(xiàn)個(gè)數(shù)據(jù)透視表自然不在話下,其接口函數(shù)為pivot_table,給出其核心參數(shù)如下:
          • values?: 待聚合的列名

          • index?:?用于放入透視表結(jié)果中的行索引列名

          • columns?:?用于放入透視表結(jié)果中列索引列名

          • aggfunc :?聚合統(tǒng)計(jì)函數(shù),可以是單個(gè)函數(shù),也可以是函數(shù)列表,還可以是字典格式,默認(rèn)聚合函數(shù)為均值。當(dāng)該參數(shù)傳入字典格式時(shí),key為列名,value為聚合函數(shù)值,此時(shí)values參數(shù)無(wú)效

          • fill_value : 缺失值填充值,默認(rèn)為None,即不對(duì)缺失值做任何處理。注意這里的缺失值是指透視后結(jié)果中可能存在的缺失值,而非透視前的原表中缺失值

          • margins?: 指定是否加入?yún)R總列,布爾值,默認(rèn)為False,體現(xiàn)為Excel透視表中的行小計(jì)和列小計(jì)

          • margins_name?:?匯總列的列名,與上一個(gè)參數(shù)配套使用,默認(rèn)為'All',當(dāng)margins為False時(shí),該參數(shù)無(wú)作用

          • dropna :?是否丟棄匯總結(jié)果中全為NaN的行或列,默認(rèn)為True。例如,行有3個(gè)取值,列有3個(gè)取值,經(jīng)過(guò)透視表重組后理論上最多有3×3=9個(gè)結(jié)果,但實(shí)際可能只有3×2=6個(gè)非空值,其中全為空的一列默認(rèn)舍棄

          • observed : 適用于分類變量,一般無(wú)需關(guān)注。


          其中前4個(gè)參數(shù)是核心參數(shù)。


          仍以titanic數(shù)據(jù)集為例,應(yīng)用pivot_table完成前述數(shù)據(jù)透視表操作,默認(rèn)情況下只需如下調(diào)用:


          如果既需要統(tǒng)計(jì)不同性別各艙位下的生存人數(shù)(對(duì)應(yīng)Survived=1),又想統(tǒng)計(jì)生存率(生存人數(shù)與該分組下總?cè)藬?shù)的比例),那么僅需在傳入aggfunc參數(shù)時(shí)增加一個(gè)mean聚合函數(shù)即可:


          更進(jìn)一步地,如果需要增加行和列的小計(jì)統(tǒng)計(jì),則可通過(guò)傳入margins和margins_name參數(shù):


          最后,為了測(cè)試fill_value字段效果,以SibSp字段(同艙內(nèi)親友數(shù)量)作為行索引,得到初始透視表如下:


          其中,當(dāng)行索引和列索引對(duì)應(yīng)的具體分組下的記錄數(shù)為0時(shí),得到的聚合結(jié)果為NaN,此時(shí)可通過(guò)指定fill_value參數(shù)來(lái)進(jìn)一步填充,即:


          實(shí)際上,上述效果就相當(dāng)于執(zhí)行完pivot_table的基礎(chǔ)上再加一個(gè)fillna()函數(shù)即可。



          03 pivot_table與pivot
          pivot與pivot_table都含有pivot一詞,所以功能上也有一定的相近之處。這里,理解pivot的含義主要在于變形,更確切的說(shuō)是將一個(gè)長(zhǎng)表整形為寬表,例如SQL中的經(jīng)典場(chǎng)景列轉(zhuǎn)行,表述的就是這個(gè)問(wèn)題。那么二者的主要區(qū)別在于:
          • pivot僅適用于數(shù)據(jù)變形,即由長(zhǎng)表變?yōu)閷挶恚喈?dāng)于對(duì)數(shù)據(jù)進(jìn)行了重組;而pivot_table除了數(shù)據(jù)重組外,還有一個(gè)額外的效果,即數(shù)據(jù)聚合,即若重組后對(duì)應(yīng)的行標(biāo)簽和列標(biāo)簽下取值不唯一,此時(shí)按指定方法進(jìn)行聚合;換言之,pivot能干的事情,pivot_table都能干,反之則不然。


          • pivot由于僅涉及行列重組和變形,所以一般更適用于分類變量;而pivot_table在重組的基礎(chǔ)上還增加了聚合統(tǒng)計(jì)的過(guò)程,所以一般更適用于數(shù)值型變量,但對(duì)于支持分類變量統(tǒng)計(jì)的聚合函數(shù)(例如count),則pivot_table也可適用。




          相關(guān)閱讀:


          瀏覽 58
          點(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>
                  免费在线观看V片 | 日韩一级| 国产免费无码不卡看小穴 | 另类国产ts一区二区三区 | 男人侵犯女人网站 |