Sklearn 有專門處理缺失值的模塊 sklearn.impute.SimpleImputer,本文將探究如何用 Sklearn 中的預處理模塊中的 Impute.SimpleImputer 處理缺失值。
一、模塊介紹
官網(wǎng)詳解在 part 6.4 Imputation of missing values:https://scikit-learn.org/stable/modules/impute.html


二、示例應用
接下來將用實例來講解如何使用填補缺失值:
1)數(shù)據(jù)來源及數(shù)據(jù)基本信息
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()

數(shù)據(jù)概要:實例使用的是泰坦尼克號數(shù)據(jù)集,查看數(shù)據(jù)集基本信息,發(fā)現(xiàn)Age、Cabin、Embarkde這三個字段均有數(shù)據(jù)缺失。其中Cabin缺失687條,Age缺失177條,Embarked缺少2條數(shù)據(jù)。下面示例應用將以填充數(shù)據(jù)集的[Age]字段為例。
2)缺失值處理應用
1、均值填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的數(shù)值,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一步完成調(diào)取結(jié)果
data['Age']=imp_mean #填充好的數(shù)據(jù)傳回到 data['Age']列
data['Age'].isnull().sum() #檢驗是否還有空值,為0即說明空值均已被填充
2、中值填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的數(shù)值,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一步完成調(diào)取結(jié)果
data['Age']=imp_median #填充好的數(shù)據(jù)傳回到 data['Age']列
data['Age'].isnull().sum() #檢驗是否還有空值,為0即說明空值均已被填充
3、眾數(shù)填充
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的數(shù)值,sklearn當中特征矩陣必須是二維才能傳入 使用reshape(-1,1)升維
from sklearn.impute import SimpleImputer #導入模塊
imp_most_frequent=SimpleImputer(missing_values=np.nan,strategy='most_frequent') #實例化,眾數(shù)填充
imp_most_frequent=imp_most_frequent.fit_transform(age) #fit_transform一步完成調(diào)取結(jié)果
data['Age']=imp_most_frequent #填充好的數(shù)據(jù)傳回到 data['Age']列
data['Age'].isnull().sum() #檢驗是否還有空值,為0即說明空值均已被填充
4、常數(shù)填充(填充0,填充1等常數(shù))
age=data['Age'].values.reshape(-1,1) #取出缺失值所在列的數(shù)值,sklearn當中特征矩陣必須是二維才能傳入 使用reshape(-1,1)升維
from sklearn.impute import SimpleImputer #導入模塊
imp_0=SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0) #實例化,填充常數(shù)0,填充常數(shù)需strategy與fill_value一同使用
imp_0=imp_0.fit_transform(age) #fit_transform一步完成調(diào)取結(jié)果
data['Age']=imp_0 #填充好的數(shù)據(jù)傳回到 data['Age']列
data['Age'].isnull().sum() #檢驗是否還有空值,為0即說明空值均已被填充