1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 数据预处理--缺失值填补《菜菜学习笔记》

数据预处理--缺失值填补《菜菜学习笔记》

时间:2019-03-07 23:38:56

相关推荐

数据预处理--缺失值填补《菜菜学习笔记》

目录

引言

一、缺失值填补 impute.SimpleImputer函数

1.1 Simplelmputer四个重要参数

1.2 用各个值填补演示

1.3 在这里我们使用中位数填补Age,用众数填补Embarked:

1.4 用Pandas和Numpy进行填补其实更加简单

引言

机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值

我们采用从泰坦尼克号提取出来的数据,这个数据有三个特征,如下:

Age 数值型Sex 字符型Embarked 字符型

import pandas as pd#index_col=0是因为原数据中第1列本就是索引data = pd.read_csv(r"..\datasets\Narrativedata.csv",index_col=0)data.head()

一、缺失值填补 impute.SimpleImputer函数

class sklearn.impute.SimpleImputer(missing_values=nan,strategy="mean",fill_value=None,verbose=0,copy=True)

1.1 Simplelmputer四个重要参数

这个类是专门用来填充缺失值的。它包括四个重要参数:

>missing_values:告诉Simplelmputer,数据中的缺失值长什么样,默认空值np.nan

>strategy

我们填补缺失值的策略,默认均值

输入"mean"使用均值填补(仅对数值型特征可用)

输入"median"用中值填补(仅对数值型特征可用)

输入"most_frequent"用众数进行填补(对数值型和字符型特征都可用)

输入"constant"表示请参考参数"fill_value"中的值(对数值型和字符型特征都可用)

>fill_value

当参数startegy为"constant"的时候可用,可输入字符串或数字表示要填充的值,常用0

>copy

默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去

import pandas as pd#index_col=0是让计算机知道原数据中第一列样本是索引data=pd.read_csv((r"..\datasets\Narrativedata.csv",index_col=0)data.head()

data.info()#由运行结果可知Age和Embarked有缺失值"""<class 'pandas.core.frame.DataFrame'>Int64Index: 891 entries, 0 to 890Data columns (total 4 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Age 714 non-null float641 Sex 891 non-null object 2 Embarked 889 non-null object 3 Survived 891 non-null object dtypes: float64(1), object(3)memory usage: 34.8+ KB"""

#查看数据

#查看数据Age=data.loc[:,"Age"].values.reshape(-1,1) #sklearn当中的矩阵必须是二维的Age[:20]"""array([[22.],[38.],[26.],[35.],[35.],[nan],[54.],[ 2.],[27.],[14.]])

1.2 用各个值填补演示

from sklearn.impute import SimpleImputerimport pandas as pddata=pd.read_csv((r"..\datasets\Narrativedata.csv",index_col=0)Age=data.loc[:,"Age"].values.reshape(-1,1) imp_median=SimpleImputer(strategy="median")#用中位数填补imp_median=imp_median.fit_transform(Age)#中值填补imp_0=SimpleImputer(strategy="constant",fill_value=0)#用零填补imp_0=imp_0.fit_transform(Age) #使用0填补imp_median[:10] #查看用中值填补后的前20条数据imp_0[:10] #查看用0填补后的前20条数据

1.3 在这里我们使用中位数填补Age,用众数填补Embarked:

from sklearn.impute import SimpleImputer#在这里我们使用中位数填补Agedata.loc[:,"Age"]=imp_median#使用众数填补EmbarkedEmbarked=data.loc[:,"Embarked"].value.reshape(-1,1)imp_mode=SimpleImputer(strategy="most_frequent")data.loc[:,"Embarked"]=imp_mode.fit_transform(Embarked)data.info() #由结果可知填补已经完成了"""<class 'pandas.core.frame.DataFrame'>Int64Index: 891 entries, 0 to 890Data columns (total 4 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Age 891 non-null float641 Sex 891 non-null object 2 Embarked 891 non-null object 3 Survived 891 non-null object dtypes: float64(1), object(3)memory usage: 34.8+ KB"""# data.head(20) #显示填补后的前20条数据

1.4 用Pandas和Numpy进行填补其实更加简单

import pandas as pddata=pd.read_csv(r"数据地址")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表示生成一个复制对象,不修改原数据,默认为Flase

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。