关于使用Sklearn进行数据预处理 —— 缺失值(Missing Value)处理

关于使用Sklearn进行数据预处理 —— 缺失值(Missing Value)处理

关于缺失值(missing value)的处理

在sklearn的preprocessing包中包含了对数据集中缺失值的处理,主要是应用Imputer类进行处理。

首先需要说明的是,numpy的数组中可以使用np.nan/np.NaN(Not A Number)来代替缺失值,对于数组中是否存在nan可以使用np.isnan()来判定。

使用type(np.nan)或者type(np.NaN)可以发现改值其实属于float类型,代码如下:

1

2

3

4

5

6

7

8

>>> type(np.NaN)

<type 'float'>

>>> type(np.nan)

<type 'float'>

>>> np.NaN

nan

>>> np.nan

nan

 

因此,如果要进行处理的数据集中包含缺失值一般步骤如下:

1、使用字符串'nan'来代替数据集中的缺失值;

2、将该数据集转换为浮点型便可以得到包含np.nan的数据集;

3、使用sklearn.preprocessing.Imputer类来处理使用np.nan对缺失值进行编码过的数据集。

代码如下:

 

1

2

3

4

5

6

7

8

9

10

>>> from sklearn.preprocessing import Imputer

>>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

>>> X=np.array([[1, 2], [np.nan, 3], [7, 6]])

>>> Y=[[np.nan, 2], [6, np.nan], [7, 6]]

>>> imp.fit(X)

Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)

>>> imp.transform(Y)

array([[ 4.        2.        ],

       [ 6.        3.66666667],

       [ 7.        6.        ]])


上述代码使用数组X去“训练”一个Imputer类,然后用该类的对象去处理数组Y中的缺失值,缺失值的处理方式是使用X中的均值(axis=0表示按列进行)代替Y中的缺失值。

当然也可以使用imp对象来对X数组本身进行处理。

通常,我们的数据都保存在文件中,也不一定都是Numpy数组生成的,因此缺失值可能不一定是使用nan来编码的,对于这种情况可以参考以下代码:

1

2

3

4

5

6

7

8

9

10

11

12

>>> line='1,?'

>>> line=line.replace(',?',',nan')

>>> line

'1,nan'

>>> Z=line.split(',')

>>> Z

['1', 'nan']

>>> Z=np.array(Z,dtype=float)

>>> Z

array([  1.,  nan])

>>> imp.transform(Z)

array([[ 1.        3.66666667]])

上述代码line模拟从文件中读取出来的一行数据,使用nan来代替原始数据中的缺失值编码,将其转换为浮点型,然后使用X中的均值填补Z中的缺失值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值