1. 程式人生 > 其它 >python缺失值處理

python缺失值處理

資料預處理

一、缺失值處理

均值填充、中位數填充、眾數填充、常數填充

import pandas as pd
import numpy as np

c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)
C
0 1 2 3
0 1.0 2.0 3.0 4.0
1 4.0 5.0 6.0 NaN
2 5.0 6.0 7.0 8.0
3 9.0 4.0 NaN 8.0

(1)匯入資料預處理中填充模組SimpleImputer

from sklearn.impute import SimpleImputer

(2)利用Imputer 建立填充物件imp_mean

imp_mean = SimpleImputer(missing_values=np.nan,strategy='mean',verbose=0) 

引數說明:
引數 含義&輸入
missing_values 告訴SimpleImputer,資料中的缺失值長什麼樣,預設空值np.nan
strategy 我們填補缺失值的策略,預設均值。 輸入“mean”使用均值填補(僅對數值型特徵可用) 輸入“median"用中值填補(僅對數值型特徵 可用) 輸入"most_frequent”用眾數填補(對數值型和字元型特徵都可用) 輸入“constant"表示請參考引數“fill_value"中的值 (對數值型和字元型特徵都可用)
fill_value 當引數startegy為”constant"的時候可用,可輸入字串或數字表示要填充的值,常用0
copy 預設為True,將建立特徵矩陣的副本,反之則會將缺失值填補到原本的特徵矩陣中去。

(3)fit_transform一步完成調取結果。

imp_mean=imp_mean.fit_transform(C)     #fit_transform一步完成調取結果
imp_mean
array([[1.        , 2.        , 3.        , 4.        ],
       [4.        , 5.        , 6.        , 6.66666667],
       [5.        , 6.        , 7.        , 8.        ],
       [9.        , 4.        , 5.33333333, 8.        ]])
pd.DataFrame(imp_mean)
0 1 2 3
0 1.0 2.0 3.000000 4.000000
1 4.0 5.0 6.000000 6.666667
2 5.0 6.0 7.000000 8.000000
3 9.0 4.0 5.333333 8.000000

1、均值填充

指定列 處理空值

#指定列處理空值
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

#生成一個有空值的陣列
c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)

#取的要處理的列
age = C[2]
#age=C[2].values.reshape(-1,1) #取出缺失值所在列的數值,sklearn當中特徵矩陣必須是二維才能傳入 使用reshape(-1,1)升維

#升維
age = pd.DataFrame(age)

#利用Imputer 建立填充物件imp_mean
imp_mean = SimpleImputer(missing_values=np.nan,strategy='mean',verbose=0) 

#fit_transform一步完成調取結果
imp_mean = imp_mean.fit_transform(age) 

#將值賦值給原陣列
C[2]=imp_mean  
C
0 1 2 3
0 1.0 2.0 3.000000 4.0
1 4.0 5.0 6.000000 NaN
2 5.0 6.0 7.000000 8.0
3 9.0 4.0 5.333333 8.0

處理整個陣列的全部列

#處理整個陣列的全部列
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

#生成一個有空值的陣列
c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)

#利用Imputer 建立填充物件imp_mean
imp_mean = SimpleImputer(missing_values=np.nan,strategy='mean',verbose=0) 

#fit_transform一步完成調取結果
imp_mean = imp_mean.fit_transform(C) 

pd.DataFrame(imp_mean)

#檢驗是否還有空值,為0即說明空值均已被填充
#pd.DataFrame(imp_mean).isnull().sum() 

0 1 2 3
0 1.0 2.0 3.000000 4.000000
1 4.0 5.0 6.000000 6.666667
2 5.0 6.0 7.000000 8.000000
3 9.0 4.0 5.333333 8.000000

2、中位數填充

#處理整個陣列的全部列
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

#生成一個有空值的陣列
c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)


#利用Imputer 建立填充物件imp_mean
imp_median = SimpleImputer(missing_values=np.nan,strategy='median',verbose=0) 

#fit_transform一步完成調取結果
imp_median = imp_median.fit_transform(C) 

pd.DataFrame(imp_median)

#檢驗是否還有空值,為0即說明空值均已被填充
#pd.DataFrame(imp_median).isnull().sum() 
0 1 2 3
0 1.0 2.0 3.0 4.0
1 4.0 5.0 6.0 8.0
2 5.0 6.0 7.0 8.0
3 9.0 4.0 6.0 8.0

3、眾數填充

#處理整個陣列的全部列
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

#生成一個有空值的陣列
c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)


#利用Imputer 建立填充物件imp_mean
imp_most_frequent = SimpleImputer(missing_values=np.nan,strategy='most_frequent',verbose=0) 

#fit_transform一步完成調取結果
imp_most_frequent = imp_most_frequent.fit_transform(C) 

pd.DataFrame(imp_most_frequent)

#檢驗是否還有空值,為0即說明空值均已被填充
#pd.DataFrame(most_frequent).isnull().sum() 
0 1 2 3
0 1.0 2.0 3.0 4.0
1 4.0 5.0 6.0 8.0
2 5.0 6.0 7.0 8.0
3 9.0 4.0 3.0 8.0

4、常數填充

#處理整個陣列的全部列
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

#生成一個有空值的陣列
c = np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])
C=pd.DataFrame(c)


#利用Imputer 建立填充物件imp_mean,
#例項化,填充常數0,填充常數需strategy與fill_value一同使用
imp_0 = SimpleImputer(missing_values=np.nan,strategy='constant',fill_value=0) 

#fit_transform一步完成調取結果
imp_0 = imp_0.fit_transform(C) 

pd.DataFrame(imp_0)

#檢驗是否還有空值,為0即說明空值均已被填充
#pd.DataFrame(imp_0).isnull().sum() 
0 1 2 3
0 1.0 2.0 3.0 4.0
1 4.0 5.0 6.0 0.0
2 5.0 6.0 7.0 8.0
3 9.0 4.0 0.0 8.0