slearn缺失值處理器之Imputer詳析

class sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)

參數:

  • missing_values: integer or “NaN”, optional (default=”NaN”)
  • strategy : string, optional (default=”mean”)
    • The imputation strategy.
      • If “mean”, then replace missing values using the mean along the axis. 使用平均值代替
      • If “median”, then replace missing values using the median along the axis.使用中值代替
      • If “most_frequent”, then replace missing using the most frequent value along the axis.使用眾數代替,也就是出現次數最多的數
  • axis: 默認為 axis=0
    • axis = 0, 按列處理
    • aixs =1 , 按行處理

說實話,我還是沒太弄明白aixs的具體含義,總感覺在不同的函數中有不同的含義。。還是使用前查找一下官方文檔吧,畢竟大多數時候處理的都是2維數組,文檔中的參數很容易理解。

註意:

  • Imputer 隻接受DataFrame類型
  • Dataframe 中必須全部為數值屬性

所以在處理的時候註意,要進行適當處理

數值屬性的列較少,可以將數值屬性的列取出來 單獨取出來

import pandas as pd
import numpy as np

df=pd.DataFrame([["XXL", 8, "black", "class 1", 22],
["L", np.nan, "gray", "class 2", 20],
["XL", 10, "blue", "class 2", 19],
["M", np.nan, "orange", "class 1", 17],
["M", 11, "green", "class 3", np.nan],
["M", 7, "red", "class 1", 22]])

df.columns=["size", "price", "color", "class", "boh"]
print(df)
# out:
'''
  size  price   color    class   boh
0  XXL    8.0   black  class 1  22.0
1    L    NaN    gray  class 2  20.0
2   XL   10.0    blue  class 2  19.0
3    M    NaN  orange  class 1  17.0
4    M   11.0   green  class 3   NaN
5    M    7.0     red  class 1  22.0
'''
from sklearn.preprocessing import Imputer
# 1. 創建Imputer器
imp =Imputer(missing_values="NaN", strategy="mean",axis=0 )
# 先隻將處理price列的數據, 註意使用的是   df[['price']]   這樣返回的是一個DataFrame類型的數據!!!!
# 2. 使用fit_transform()函數即可完成缺失值填充瞭
df["price"]=imp.fit_transform(df[["price"]])
df
# out:
'''
   size	price	color	class	boh
0	XXL	8.0	black	class 1	22.0
1	L	9.0	gray	class 2	20.0
2	XL	10.0	blue	class 2	19.0
3	M	9.0	orange	class 1	17.0
4	M	11.0	green	class 3	NaN
5	M	7.0	red	class 1	22.0
'''

# 直接處理price和boh兩列
df[['price', 'boh']] = imp.fit_transform(df[['price', 'boh']])
df
# out:
'''
size	price	color	class	boh
0	XXL	8.0	black	class 1	22.0
1	L	9.0	gray	class 2	20.0
2	XL	10.0	blue	class 2	19.0
3	M	9.0	orange	class 1	17.0
4	M	11.0	green	class 3	20.0
5	M	7.0	red	class 1	22.0
'''

數值屬性的列較多,相反文本或分類屬性(text and category attribute)較少,可以先刪除文本屬性,處理完以後再合並

from sklearn.preprocessing import Imputer
# 1.創建Iimputer
imputer = Imputer(strategy="median")
# 隻有一個文本屬性,故先去掉
housing_num = housing.drop("ocean_proximity", axis=1)
# 2. 使用fit_transform函數
X = imputer.fit_transform(housing_num)
# 返回的是一個numpyarray,要轉化為DataFrame
housing_tr = pd.DataFrame(X, columns=housing_num.columns)

# 將文本屬性值添加
housing_tr['ocean_proximity'] = housing["ocean_proximity"]

housing_tr[:2]
# out:
'''
    longitude	latitude	housing_median_age	total_rooms	total_bedrooms	population	households	median_income
0	-121.89 	37.29     	38.0  	              1568.0	    351.0	     710.0	     339.0	    2.7042
1	-121.93	    37.05   	14.0	              679.0	        108.0	     306.0   	113.0	   6.4214
'''

補充:sklearn中的Imputer模塊改動

在sklearn的0.22以上版本的sklearn去除瞭Imputer類,我們可以使用SimpleImputer類代替。或者降級回版本sklearn 0.19

from sklearn.impute import SimpleImputer
#有如下的一些參數
sklearn.impute.SimpleImputer(
		missing_values=nan,
		strategy='mean',
		fill_value=None,
		verbose=0,
		copy=True,
		add_indicator=False
)[source]
imputer = SimpleImputer(missing_values=NA, strategy = "mean")

用上面那個代碼就可以實現imputer的功能。其他的參數詳解如下,具體的話大傢去查閱sklearn庫的說明。

  • misssing_values: number,string,np.nan(default) or None
    缺失值的占位符,所有出現的占位符都將被計算
  • strategy: string,default=‘mean’ 計算並替換的策略:
    "mean,使用該列的平均值替換缺失值。僅用於數值數據; “median”,使用該列的中位數替換缺失值。僅用於數值數據;
    “most_frequent”,使用每個列中最常見的值替換缺失值。可用於非數值數據;
    “constant”,用fill_value替換缺失值。可用於非數值數據。
  • fill_value: string or numerical value,default=None
    當strategy為"constant",使用fil_value替換missing_values。如果是default,使用0替換數值數據,使用"missing_value"替換字符串或對象數據類型
  • verbose: integer,default=0
  • copy: boolean,default=True
  • True: 將創建X的副本;False: 隻要有可能,就會原地替換。註意,一下情況即使copy=False,也會創建新的副本:
  • add_indicator: boolean,default=False
    True,則MissingIndicator將疊加到輸入器轉換的輸出上。這樣即使進行瞭imputation歸算,也同樣會讓預測估算器描述缺失值。如果某個特征在fit/train時沒有缺失值,那麼即使在transform/tes時有缺失值,該特征也不會出現在缺失的指示器上。

隨著版本的更新,Imputer的輸入方式也發生瞭變化,一開始的輸入方式為

from sklearn.preprocessing import Imputer
imputer = Imputer(strategy='median')

現在需要對上面輸入進行更新,輸入變為

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")

簡單使用:

from sklearn.impute import SimpleImputer
import numpy as np
 
def im():
    """
    缺失值處理
    :return: None
    """
    im1 = SimpleImputer(missing_values=np.nan, strategy='mean')
    data = im1.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    print(data)
    return None
 
if __name__ == "__main__":
    im()

總結

到此這篇關於slearn缺失值處理器之Imputer的文章就介紹到這瞭,更多相關slearn缺失值處理器Imputer內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: