Sklearn 有专门处理缺失值的模块 sklearn.impute.SimpleImputer,本文将探究如何用 Sklearn 中的预处理模块中的 Impute.SimpleImputer 处理缺失值。
一、模块介绍
官网详解在 part 6.4 Imputation of missing values:https://scikit-learn.org/stable/modules/impute.html
它包含四个重要参数:
二、示例应用
接下来将用实例来讲解如何使用填补缺失值:
1)数据来源及数据基本信息
>>> from sklearn.impute import SimpleImputer
>>> import pandas as pd
>>> import numpy as np
>>> data=pd.read_csv(r'C:\Users\Administrator\Desktop\titanic\train.csv',index_col=0)
>>> data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB
>>> data.shape
(891, 11)
数据概要:实例使用的是泰坦尼克号数据集,查看数据集基本信息,发现Age、Cabin、Embarkde这三个字段均有数据缺失。其中Cabin缺失687条,Age缺失177条,Embarked缺少2条数据。下面示例应用将以填充数据集的[Age]字段为例。
2)缺失值处理应用
1、均值填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维
from sklearn.impute import SimpleImputer #导入模块
imp_mean=SimpleImputer(missing_values=np.nan,strategy='mean') #实例化,均值填充
imp_mean=imp_mean.fit_transform(age) #fit_transform一步完成调取结果
data['Age']=imp_mean #填充好的数据传回到 data['Age']列
data['Age'].isnull().sum() #检验是否还有空值,为0即说明空值均已被填充
2、中值填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维
from sklearn.impute import SimpleImputer #导入模块
imp_median=SimpleImputer(missing_values=np.nan,strategy='median') #实例化,中值填充
imp_median=imp_median.fit_transform(age) #fit_transform一步完成调取结果
data['Age']=imp_median #填充好的数据传回到 data['Age']列
data['Age'].isnull().sum() #检验是否还有空值,为0即说明空值均已被填充
3、众数填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维
from sklearn.impute import SimpleImputer #导入模块
imp_most_frequent=SimpleImputer(missing_values=np.nan,strategy='most_frequent') #实例化,众数填充
imp_most_frequent=imp_most_frequent.fit_transform(age) #fit_transform一步完成调取结果
data['Age']=imp_most_frequent #填充好的数据传回到 data['Age']列
data['Age'].isnull().sum() #检验是否还有空值,为0即说明空值均已被填充
4、常数填充(填充0,填充1等常数)
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的数值,sklearn当中特征矩阵必须是二维才能传入 使用reshape(-1,1)升维
from sklearn.impute import SimpleImputer #导入模块
imp_0=SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0) #实例化,填充常数0,填充常数需strategy与fill_value一同使用
imp_0=imp_0.fit_transform(age) #fit_transform一步完成调取结果
data['Age']=imp_0 #填充好的数据传回到 data['Age']列
data['Age'].isnull().sum() #检验是否还有空值,为0即说明空值均已被填充
转自:https://www.jianshu.com/p/2c59147e1df1