手动反爬虫: 原博地址 https://blog.csdn.net/lys_828/article/details/124083243
知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息
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
输出结果如下
核心: 两者的区别也就是传入到两个版本的数据的差别,一个以按照行进行列填充(所以就是多行一列),一个是可以自由指定,这里为了方便记忆,可以指定为按照列进行行填充(也就是一行多列)。