經常聽別人說 Python 在數據領域有多厲害,結果學了很長時間,連數據處理都麻煩得要死。後來才發現,原來不是 Python 數據處理厲害,而是他有數據分析神器—— pandas
前言
今天從兩個需求來看看數據分列功能,由於 Excel 自帶功能比較弱,在處理稍微複雜的需求時會顯得力不從心,因此,本系列文章將引入 Excel 中一個非常高效的數據處理插件—— Power Query,並且看看 pandas 是怎樣靈活解決。
本文結構:
先看看簡單的分列接著嘗試分割擴展成行最後是多列分割擴展成行Excel 分列
Excel中對數據進行分列是非常簡單的。如下:
選中需要處理的列功能卡"數據","分列"按鈕,即出現設置彈窗選"分隔符號",點擊下一步左上部分,勾選"逗號",點擊下一步最後看到結果預覽,沒問題,直接點擊完成pandas 分列
pandas對文本列進行分列,非常簡單:
DataFrame.str.split() ,對文本列分列,第一參數指定分隔符此外,參數 expand ,表示是否擴展成列,若設置為 True ,則分割後的每個元素都成為單獨一列。這符合當前需求
複雜點的需求
有時候,我們希望分割的內容,轉化成行,需求如下:
比如,第一行 張三 的科目中有3個元素,則分割結果 張三就有3行使用Excel自帶功能處理這需求就比較困難,我們使用PowerQuery來處理:
功能區"Power Query",點"從表/範圍"此時會啟動 Power query 編輯窗口
點選 科目 整列上方功能區"開始","轉換"區中,點選"拆分列",選"按分隔符"
這裡大部分設置與 Excel 自帶功能基本一致點開"高級選項",點選"拆分為"中的"行"
功能區"開始",最左邊點按鈕"關閉並上載",即可把結果輸出會 Excel請自行到官方網站下載此插件安裝
那麼pandas中怎麼實現這需求:
先用 str.split 分割,但這次不需要 expand調用 DataFrame.explode(),對某一序列類型的列進行展開注意,explode 方法是 pandas 0.25 版本的新增方法
提升難度
假如現在有多列需要進行分割展開呢?如下:
同時把科目和成績分割擴展到行直接看pandas怎麼解決:
先對 科目 與 成績 列分別進行 split 後,再進行 explode然後通過 concat,與原來的 性名 列合併雖然實現了,但代碼的語義不夠清晰。程式語言的靈活性在此可以充分體現,我們把邏輯封裝成一個函數hp_explode,以後需要使用時,簡單調用即可:
hp_explode() ,可自動識別內容是 list 的列進行擴展hp_explode 方法的定義不是本文的核心,需要源碼的小夥伴看文末
不想調用.str.split?當然也支持:
一句搞定總結
Series.str.split() ,對文本列分割expand 參數指定是否擴展為列DataFrame.explode() ,對序列的列擴展成行,通常與 Series.str.split() 配合使用下一節,將看看 Excel 舉世聞名的 vlookup 函數與 pandas 中的實現
如果希望從零開始學習 pandas ,那麼可以看看我的 pandas 專欄。