Sklearn Impute SimpleImputer 处理缺失值

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值