Sklearn 有专门处理缺失值的模块 sklearn.impute.SimpleImputer,本文将探究如何用 Sklearn 中的预处理模块中的 Impute.SimpleImputer 处理缺失值。
一、模块介绍
官网详解在 part 6.4 Imputation of missing values:https://scikit-learn.org/stable/modules/impute.html
二、示例应用
接下来将用实例来讲解如何使用填补缺失值:
1)数据来源及数据基本信息
import pandas as pd
import numpy as np
data=pd.read_csv("C:\\Users\\DRF\\Desktop\\tatanic\\datasets\\train.csv",index_col=0)
data.head()
data.info()
数据概要:实例使用的是泰坦尼克号数据集,查看数据集基本信息,发现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即说明空值均已被填充