對 DataFrame 進行序位編碼
類別型特徵可以用兩種技巧來編碼:one-hot 編碼與序位編碼。one-hot 編碼會將每個類別轉成一個欄位,且每列在其所屬的類別欄位為 1,其餘為 0。序位編碼則是將各類別對應到從 0 開始、直到類別數量的整數值。
在本練習中,你會遍歷 users DataFrame 中的所有欄位,將類別做序位編碼。你也會為每個欄位在字典 ordinal_enc_dict 中儲存一個編碼器,之後即可把已編碼的欄位轉回原始類別。
本練習屬於課程
在 Python 中處理遺漏值
練習說明
- 定義一個空字典
ordinal_enc_dict。 - 為每個欄位建立一個 Ordinal Encoder 物件。
- 選取 users 中該欄位的非空值並進行編碼。
- 將編碼後的數值指派回 users 中各欄位(
col_name)的非空位置。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Create an empty dictionary ordinal_enc_dict
ordinal_enc_dict = ___
for col_name in users:
# Create Ordinal encoder for col
ordinal_enc_dict[col_name] = ___
col = users[col_name]
# Select non-null values of col
col_not_null = ___
reshaped_vals = col_not_null.values.reshape(-1, 1)
encoded_vals = ordinal_enc_dict[col_name].fit_transform(reshaped_vals)
# Select the non-null values for the column col_name in users and store the encoded values
users.loc[___, ___] = np.squeeze(encoded_vals)