day 6 处理分类型数据
# 将文字型数据转换为数值型 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())