缺失值
机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。
import pandas as pd data = pd.read_csv(r"C:worklearnbettermicro-class week 3 PreprocessingNarrativedata.csv",index_col=0) data.head()
这里,我们使用从泰坦尼克号提取出来的数据,这个数据有三个特征,一个数值型,两个字符型,标签也是字符型。从这里开始,我们就使用这个数据给大家作为例子,让大家慢慢熟悉sklearn中数据预处理的各种方式。
impute.SimpleImputer
class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0, copy=True)
这个类是专门用来填补缺失值的。它包括四个重要参数:
data.info() #填补年龄 Age = data.loc[:,"Age"].values.reshape(-1,1) #sklearn当中特征矩阵必须是二维 Age[:20] from sklearn.impute import SimpleImputer imp_mean = SimpleImputer() #实例化,默认均值填补 imp_median = SimpleImputer(strategy="median") #用中位数填补 imp_0 = SimpleImputer(strategy="constant",fill_value=0) #用0填补 imp_mean = imp_mean.fit_transform(Age) #fit_transform一步完成调取结果 imp_median = imp_median.fit_transform(Age) imp_0 = imp_0.fit_transform(Age) imp_mean[:20] imp_median[:20] imp_0[:20] #在这里我们使用中位数填补Age data.loc[:,"Age"] = imp_median data.info() #使用众数填补Embarked Embarked = data.loc[:,"Embarked"].values.reshape(-1,1) imp_mode = SimpleImputer(strategy = "most_frequent") data.loc[:,"Embarked"] = imp_mode.fit_transform(Embarked) data.info()
BONUS:用Pandas和Numpy进行填补其实更加简单
import pandas as pd data = pd.read_csv(r"C:worklearnbettermicro-classweek 3 PreprocessingNarrativedata.csv",index_col=0) data.head() data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median()) #.fillna 在DataFrame里面直接进行填补 data.dropna(axis=0,inplace=True) #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列 #参数inplace,为True表示在原数据集上修改,为False生成一个复制对象,不改变原来的值,默认False