【疑难杂症】sklearn老版本的Imputer和新版本SimpleImputer处理缺失值差异

sklearn老版本的Imputer和新版本SimpleImputer处理缺失值差异


手动反爬虫: 原博地址 https://blog.youkuaiyun.com/lys_828/article/details/124083243

 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

0 测试数据

以简单的demo数据为例,如下
在这里插入图片描述

1 老版本

sklearn的版本在0.20以下,安装的方式就为pip install scikit-learn==0.20.0,安装如下
在这里插入图片描述
在老版本中使用缺失值处理的方式为Imputer,导入对应的函数和使用带的模块代码如下

import sklearn
sklearn.__version__

from sklearn.impute import SimpleImputer
import pandas as pd
import numpy as np
data = pd.read_excel(r'C:\Users\86177\Desktop\demo.xlsx')
data

输出结果如下(前两行就是用来核实当前使用的sklearn的版本,数据中李四的成绩缺失)
在这里插入图片描述
替换的操作就是先指定替换的格式,这里是按照列以中位数的方式进行替换缺失值。axis=1,表示按照列,strategy表示填充的方式,missing_values表示缺失的数据

from sklearn.preprocessing import Imputer
Imp=Imputer(missing_values='NaN',strategy='median',axis=1)
new=Imp.fit_transform(data['成绩'].values.reshape(1,-1))
new

data['成绩'] = new.T
data

输出结果如下(输出提示Imputer在0.20版本后进行移除了,这里进行了一个输出提示,但是不影响当前版本的运算)
在这里插入图片描述

2 新版本

安装指定版本1.x,比如这里安装1.0.2版本的scikit-learn,代码执行如下
在这里插入图片描述
由于0.22版本后就移除了Imputer方法,这里使用的就是SimpleImputer,代码如下

imp_median = SimpleImputer(missing_values=np.nan,strategy="median")
new = imp_median.fit_transform(data['成绩'].values.reshape(-1,1))
new

data['成绩'] = new
data

输出结果如下(需要注意,更改后SimpleImputer里面是有没有axis参数,所以这里进行替换的时候,数据的形状和原来不一样了,注意reshape括号中的内容)
在这里插入图片描述

3 问题总结

老版本中可以通过axis参数指定是按照行还是按照列进行填充,但是新版本中删除了这个参数,默认的就是按照行进行列字段的缺失值填充,所以再使用新版本进行填充时需要把数据转化为多行数据(也就是这里的一个元素在一个中括号中),进一步可以通过reshape后的输出进行理解

new = data['成绩'].values.reshape(-1,1)
new

old = data['成绩'].values.reshape(1,-1)
old

输出结果如下
在这里插入图片描述
核心: 两者的区别也就是传入到两个版本的数据的差别,一个以按照行进行列填充(所以就是多行一列),一个是可以自由指定,这里为了方便记忆,可以指定为按照列进行行填充(也就是一行多列)。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值