在 Pandas 中將分類變數轉換為數值

Preet Sanghavi 2023年1月30日 2022年5月16日
  1. 在 Pandas 中將分類變數轉換為數值變數
  2. 在 Pandas 中使用 apply 函式將分類變數轉換為數值變數
在 Pandas 中將分類變數轉換為數值

本教程探討了在 Pandas 中將分類變數轉換為數值變數的概念。

在 Pandas 中將分類變數轉換為數值變數

本教程讓我們瞭解如何以及為什麼將某個變數從一個變數轉換為另一個變數,特別是如何將分類資料型別變數轉換為數值變數。

人們可能需要執行這樣的操作,因為某種資料型別對於分析師的分析或解釋任務可能不可行。在這種情況下,Pandas 幫助將某種型別的變數轉換為另一種變數。

讓我們瞭解如何執行如此複雜的操作。

但是,在開始之前,我們會建立一個虛擬 DataFrame 來使用。這裡我們建立一個 DataFrame,即 df

我們在這個 df DataFrame 中新增了一些列和某些資料。我們可以使用以下程式碼執行此操作。

import pandas as pd
df = pd.DataFrame({'col1':[1,2,3,4,5], 'col2':list('abcab'),  'col3':list('ababb')})

上面的程式碼建立了一個 DataFrame 以及一些條目。要檢視資料中的條目,我們使用以下程式碼。

print(df)

上面的程式碼給出了以下輸出。

   col1 col2 col3
0     1    a    a
1     2    b    b
2     3    c    a
3     4    a    b
4     5    b    b

正如我們所見,我們有 4 列和 5 行索引,從值 0 到值 4。檢視我們的 DataFrame,我們可以看到我們的資料和其他字母中有某些數值。

我們現在的工作是將這些字母值轉換為數值。

在 Pandas 中使用 apply 函式將分類變數轉換為數值變數

設定好資料後,讓我們直接開始我們的任務。第一步是視覺化每列的類別。

其他程式語言中的這一類別也稱為資料型別。我們使用下面的程式碼來檢視每列關聯的資料型別。

df['col2'] = df['col2'].astype('category')
df['col3'] = df['col3'].astype('category')
print(df.dtypes)

程式碼的輸出如下圖所示。

col1       	int64
col2    	category
col3    	category
dtype: object

如我們所見,我們有上表中列出的每一列的資料型別。我們有資料型別為 int64col1categorycol2col3 也類似於 col2

現在我們知道了每一列的資料型別,我們可以繼續下一步。

下一步是找到分類列並將它們一起列出。這在我們的操作中並不困難,但卻是極其重要的一步,因為它可以幫助我們瞭解哪些列將被轉換為數值變數。

cat_columns = df.select_dtypes(['category']).columns

如程式碼所示,我們獲取所有 dtypes 等於 category 的列。同樣,我們可以根據我們的要求獲取任何 dtype

現在我們已經找到了所有的分類列,讓我們將它們視覺化。我們可以使用以下程式碼執行此操作。

print(cat_columns)

該程式碼獲取以下輸出。

Index(['col2', 'col3'], dtype='object')

這將指示與分類列關聯的 dtype

最後一步是將這些分類變數轉換為數值變數。我們可以使用以下程式碼執行此操作。

df[cat_columns] = df[cat_columns].apply(lambda x: x.cat.codes)

該程式碼獲取以下輸出。

   col1  col2  col3
0     1     0     0
1     2     1     1
2     3     2     0
3     4     0     1
4     5     1     1

我們可以使用程式碼 print(df) 獲得輸出。

如上面的輸出所示,我們已經成功地將字母轉換為數值,從而幫助我們將分類變數轉換為數值變數。

因此,使用 apply 函式並獲取分類列,我們已將 DataFrame 中的變數從分類轉換為數值。

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub