# 將文字型數據轉換爲數值型 import pandas as pd from sklearn.impute import SimpleImputer data = pd.read_csv('缺失預處理數據22222.csv', index_col=0) # 把第0列作爲索引 data.loc[:, "Age"] = SimpleImputer(strategy="median").fit_transform(data.loc[:, "Age"].values.reshape(-1, 1)) data.dropna(axis=0, inplace=True) # todo 1: 標籤專用 # preprocessing.LabelEncoder:,能夠將分類轉換爲分類數值 y = data.iloc[:, -1] # 要輸入的是標籤,不是特徵矩陣,所以允許一維 from sklearn.preprocessing import LabelEncoder # le = LabelEncoder() # 實例化 # le = le.fit(y) # 導入數據 # label = le.transform(y) # transform接口調取結果 # # print(le.classes_) # 屬性.classes_查看標籤中究竟有多少類別 # # print(label) # 查看獲取的結果label # # le.fit_transform(y) # 也可以直接fit_transform一步到位 # # le.inverse_transform(label) # 使用inverse_transform可以逆轉 # data.iloc[:,-1]=label # # print(data.head()) # todo:::::::::::也可以直接簡寫 data.iloc[:, -1] = LabelEncoder().fit_transform(data.iloc[:, -1]) # todo 2:特徵專用 # preprocessing.OrdinalEncoder:,能夠將分類特徵轉換爲分類數值 from sklearn.preprocessing import OrdinalEncoder # 接口categories_對應LabelEncoder的接口classes_,一模一樣的功能 # data_ = data.copy() # data_.head() # # categories_ = 上面的le.classes_ 查看有多少分類 # # print(OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_) # data_.iloc[:, 1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:, 1:-1]) # print(data_.head()) # todo 3: 獨熱編碼 # preprocessing.OneHotEncoder:獨熱編碼,創建啞變量 from sklearn.preprocessing import OneHotEncoder X = data.iloc[:, 1:-1] enc = OneHotEncoder(categories='auto').fit(X) result = enc.transform(X).toarray() # .toarray() 將結果轉化爲數組 # print(result) #依然可以直接一步到位,但爲了給大家展示模型屬性,所以還是寫成了上面三步 # OneHotEncoder(categories='auto').fit_transform(X).toarray() # 還原 # enc.inverse_transform(result) # print(pd.DataFrame(enc.inverse_transform(result))) #################### todo:enc.get_feature_names() #################### 查看每個啞變量的對應哪一個特徵的類名 # print(enc.get_feature_names()) # 因爲生成的啞變量特徵矩陣暫時還沒和原本data結合,所以最好直接加上這列 #axis=1,表示跨行進行合併,也就是將量表左右相連,如果是axis=0,就是將量表上下相連 newdata = pd.concat([data,pd.DataFrame(result)],axis=1) # print(newdata.head()) # 因爲添加了性別和艙門的啞變量,原來的sex 和embarked 就不要了 newdata.drop(["Sex","Embarked"],axis=1,inplace=True) newdata.columns =["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"] print(newdata.head())