1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 2158字,需瀏覽 5分鐘

         ·

        2020-12-12 20:00


        導讀

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

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




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


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


        • 分別拖動目標字段到相應行列位置,設置統(tǒng)計函數(shù)為求和


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


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

        • 行字段

        • 列字段

        • 統(tǒng)計字段

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


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



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

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

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

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

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

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

        • margins_name?:?匯總列的列名,與上一個參數(shù)配套使用,默認為'All',當margins為False時,該參數(shù)無作用

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

        • observed : 適用于分類變量,一般無需關注。


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


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


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


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


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


        其中,當行索引和列索引對應的具體分組下的記錄數(shù)為0時,得到的聚合結果為NaN,此時可通過指定fill_value參數(shù)來進一步填充,即:


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



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


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




        相關閱讀:


        瀏覽 58
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            搞基网站在线观看 | 蜜桃久久久 | 太粗太深了太紧太爽了国产 | 欧洲秘 AV一区二区三区胖子 | 人妻巨大乳HD | 亚洲天堂综合网 | 色播五月综合 | 操逼操逼操逼逼 | 5个姿势夹到男人爽 | 国产精品扒开腿做爽爽爽视频 |