離散特征的編碼分為兩種情況:
1、離散特征的取值之間沒有大小的意義,比如color:[red,blue],那么就使用one-hot編碼
2、離散特征的取值有大小的意義,比如size:[X,XL,XXL],那么就使用數值的映射{X:1,XL:2,XXL:3}
一、pd.get_dummies()
一種字符型或者其他類型編程成一串數字向量,是實現獨熱編碼的方式
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False)[source]
注意:get_dummies只會將字段類型是object的列獨熱編碼,數據型的不獨熱編碼
參數說明:
data:需要進行獨熱編碼的數據,包括array,series,df[col]等等
prefix:前綴,可以理解為獨熱編碼后生成的列名的前綴
prefix_sep:分隔符,可以理解為獨熱編碼后生成的列名的分隔符
dummy_na:如果忽略False NaNs,則添加一列來指示NaNs
columns:要編碼的DataFrame中的列名稱。 如果列為None,則將轉換具有object或category dtype的所有列
sparse:是否應該使用SparseArray (True)或常規NumPy數組(False)來支持用dummy編碼的列
drop_first:是否通過移除第一個級別來將k-1假人從k個類別級別中取出
import numpy as np import pandas as pd df=pd.DataFrame(['green','bule','red','bule','green'],columns=['color']) pd.get_dummies(df) pd.get_dummies(df,prefix ='cl') pd.get_dummies(df,prefix ='cl',prefix_sep = '/')
如果生成的數據要和df連接,可以時join
二、pd.factorize()
factorize英文意思:分解,分解為因數,因式分解的意思
在這里,pd.factorize()做的也是“因式分解”,把常見的字符型變量分解為數字
當類別特征的類別值特別多,如有幾十個取值,如果用pd.get_dummies()則會得到好幾十列,增加了數據的稀疏性
這時候就推薦使用pd.factorize() ,返回子是一個tuple,第一個是array,第二個是index
import numpy as np import pandas as pd df=pd.DataFrame(['green','bule','red','bule','green'],columns=['color']) pd.factorize(df['color']) #(array([0, 1, 2, 1, 0], dtype=int64),Index(['green', 'bule', 'red'], dtype='object')) pd.factorize(df['color'])[0] #array([0, 1, 2, 1, 0], dtype=int64) pd.factorize(df['color'])[1] #Index(['green', 'bule', 'red'], dtype='object')