快轉到主要內容
  1. Posts/

讓數據變得整潔 —— 整理數據集的結構

·1 分鐘
Data Data Basics Data Pandas
目錄

在做數據分析的時候,數據集的結構往往是便於人類閱讀而不是利於機器去做分析,而在之前的文章中也曾詳細敘述過怎樣的數據集結構是好的,這篇文章就來說明怎麼使用 pandas 來整理數據集的結構。

拆分與合併 column
#

將一個字串 column「橫向」拆分為多個 column
#

如果想要拆分某個 column,例如某個column的數據是 “身高/體重”,我們可以使用:

df["身高/體重"].str.split("/")

.split() 可以讓我們根據指定的符號(例如 /)把字串拆成 list;預設情況下,每個元素會變成一個 list 裡的元素,但如果加上 expand=True,會直接展平成新的 dataframe 欄位:

df["身高/體重"].str.split("/", expand = True)

最後,我們把拆分後的column加入原本的 dataframe 中:

df[["身高", "體重"]] = df["身高/體重"].str.split("/", expand = True)

記住,這樣只是產出了兩個新的 column,原本的 身高/體重 的 column 還是存在,所以我們需要用 drop 方法刪除:

df.drop("身高/體重", axis = 1, inplace = True)

將一個內容為 list 的 column「縱向」拆分成多個 row
#

假如有某個 column 為 list,例如:

    姓名           興趣
0   小明  [籃球, 足球, 游泳]
1   小華     [音樂, 繪畫]

我們想要把它拆分開來,我們可以使用:

df_exploded = df.explode("興趣")

就能得到拆分了興趣的新表。

合併 column
#

想要合併兩個column的話也很簡單,舉個例子,我們有一個column叫“姓”,另外一個叫做“名”,如果我們想把它合併為“姓名”,我們可以:

df["姓"].str.cat(df["名"], sep = " ")

其中sep 的意思是之間的填充字符。當然不要忘記賦值到原本的 dataframe 上,因為這個函數不會直接修改原本的dataframe:

df["姓名"] = df["姓"].str.cat(df["名"], sep = " ")

然後就可以把原本的那兩個 column 給 drop 掉了。

把“寬”數據轉換為“長”數據
#

這裡需要舉個例子比較好說明,例子:

這是一個“寬”的數據,記錄了病人不同醫療檢測的檢測值,由於實際上每個病人檢查的項目不同,所以如果以每個檢查項目都為一個 column,那很有可能會有大量的 NaN. 為了避免發生這樣的事情,我們就有必要把它轉為長數據。

病人編號 血壓 血糖 心率
001 120 90 80
002 130 NaN 85

我們可以使用 Pandas 的 melt() 方法,將資料轉換為更適合管理和分析的「長格式」:

df_long = pd.melt(df, id_vars=["病人編號"], var_name="測量指標", value_name="數值")

就能得到:

   病人編號 測量指標   數值
0   001  血壓  120.0
1   002  血壓  130.0
2   001  血糖   90.0
3   002  血糖    NaN
4   001  心率   80.0
5   002  心率   85.0

其中每個參數的意思是:

參數 作用
id_vars=["病人編號"] 指定哪個欄位是每筆資料的固定識別欄位(不變的欄位)
var_name="測量指標" 指定新的欄位名稱,用來存放原本的欄位名稱(例如:血壓、血糖、心率)
value_name="數值" 指定新的欄位名稱,用來存放對應的數值

相關文章

用 `get_dummies` 將分類變數轉換為數值型資料
·1 分鐘
Data Data Basics Data Pandas
用query進行條件篩選
·1 分鐘
Data Data Basics Data Pandas
用 cut 對數據分組
·1 分鐘
Data Data Basics Data Pandas