sklearn 資料缺失值處理

2021-07-28 19:16:17 字數 3915 閱讀 4939

在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

>>>fromsklearn.preprocessingimportimputer

>>> 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中的缺失值。

sklearn處理缺失值

匯入包 from sklearn.impute import sampleimpute先將一列資料初始化為乙個二維的 data age data.loc age values.reshape 1 1 開始填補缺失值 imp mean impute 預設用0填補 imp median impute s...

sklearn 缺失值處理器 Imputer

class sklearn.preprocessing.imputer missing values nan strategy mean axis 0,verbose 0,copy true 引數 axis 預設為 axis 0 說實話,我還是沒太弄明白aixs的具體含義,總感覺在不同的函式中有不同...

sklearn 資料填補缺失值

機器學習和資料探勘中所使用的資料,永遠不可能是完美的。很多特徵,對於分析和建模來說意義非凡,但對於實 際收集資料的人卻不是如此,因此資料探勘之中,常常會有重要的字段缺失值很多,但又不能捨棄欄位的情況。因 此,資料預處理中非常重要的一項就是處理缺失值。從kaggle中簡單的獲取的鐵達尼號的遇難者生存資...