您現在的位置是:首頁 > 音樂首頁音樂
懂Excel就能輕鬆入門Python資料分析包pandas(十六):合併資料
表頭名字怎麼正式
此係列文章收錄在公眾號中:資料大宇宙 > 資料處理 >E-pd
經常聽別人說 Python 在資料領域有多厲害,結果學了很長時間,連資料處理都麻煩得要死。後來才發現,原來不是 Python 資料處理厲害,而是他有資料分析神器—— pandas
前言
本系列上一節說了拆分資料的案例,這次自然是說下怎麼合併資料。
隨著需求複雜度提高,很多時候已經不能用 excel 自帶功能實現了,不過 pandas 中許多概念與 excel 不謀而合
案例1
公司的銷售系統功能不全,匯出資料時只能把各個部門獨立一個Excel檔案,此時你需要對整體資料做分析,最好的方式當然是先把各個檔案統一彙總起來:
注意看,雖然每個表的標題一樣,但是他們的順序可能出現不一致
這裡有3個關鍵點:
如何獲得一個資料夾中所有檔案的路徑
載入 Excel 檔案資料
列標題對齊的情況下,多個數據合併
這次我們需要用到3個包:
pandas 不用多說
from pathlib import Path ,用於獲取資料夾中檔案的路徑
openpyxl 用於讀取 Excel 檔案所有的工作表
我們來看看如何用pandas完成需求:
Path(‘案例1’)。glob(‘*。xlsx’) ,獲得指定資料夾(案例1)中的所有 Excel 檔案路徑
pd。read_excel(f) ,載入 Excel 資料
pd。concat(dfs) ,合併多個數據,pandas 自動進行索引對齊
關於 pathlib 的知識點,請關注公眾號的入門必備系列文章
上面是普通的寫法,這場景我傾向於使用推導式:
推導式內容,請看 資料大宇宙 > Python入門必備 > 必備知識 > 細講Python推導式
案例2
有時候,表格中沒有必要的資訊,如下:
這次表格中沒有部門列,部門的資訊只能在檔名字中獲取
df[‘部門’] = f。stem ,pandas 中新增一列值是非常容易。f。stem 是不帶字尾的檔名字
為什麼上面不用推導式呢?因為推導式只適合一行連續呼叫的寫法,當然這裡還是可以使用推導式實現的:
DataFrame。assign(部門=f。stem) 是一個新增列並且返回修改後的資料的方法,特別適合這種場景下使用
各種建立或移除行列資料的應用,請留意專欄文章
案例3
實際工作中還有更麻煩的情況,比如一個部門檔案中又按性別劃分了不同的工作表:
也就是說,透過檔名字獲得部門名字,透過工作表名字獲得性別資訊
其實,道理與案例2是一樣的,只要知道怎麼獲取一個Excel檔案的工作表名字,問題即可迎刃而解:
openpyxl。load_workbook(f)。worksheets ,利用 openpyxl 包,讀取檔案的所有工作表名字
。assign(部門=f。stem,性別=wk。title) ,wk。title 即使工作表名字
總結
pathlib 包中的類 Path 是個處理檔案路徑的好東西
Path 的 方法 glob(‘*。xlsx’) ,即可獲取一個目錄下所有的 Excel 檔案
pd。concat ,合併多個 DataFrame,並且能夠自動對齊表頭
當需要往 DataFrame 新增新列時,可以考慮使用 assign
openpyxl。load_workbook(f)。worksheets ,獲取 Excel 檔案的工作表物件。其中的 title 屬性,即是工作表名字
如果希望從零開始學習 pandas ,那麼可以看看我的 pandas 專欄。