python缺失值處理
阿新 • • 發佈:2022-04-06
資料預處理
一、缺失值處理
均值填充、中位數填充、眾數填充、常數填充
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 |