大多機器學習演算法不能處理缺失的特徵,因此先建立一些函式來處理特徵缺失的問題。當在一些.csv檔案中缺少某些值的時候,一般有三種方法解決:
1 去掉對應的整個屬性
2 去掉缺失值所在的資料
3 將缺失值進行賦值
在pandas中,用 dataframe 的 dropna() ,drop() ,和 fillna() 方法,可以方便地實現:
#去掉缺失值所在資料
data.dropna(subset=["years","salary","..."])
#去掉整個屬性
data.drop("one",axis=1)
#替換缺失值
median = data["years"].median()
housing["year"].fillna(median)
scikit-learn 提供了乙個方便的類來處理缺失值: imputer 。
下面是其使用方法:首先,需要建立乙個 imputer 例項,指定用某屬性的中位數來替換該屬性所有的缺失值:
from sklearn.preprocessing import imputer
imputer = imputer(strategy="median")
#其中的strategy是選擇替換缺失值的方式,midian表示用中位數替換
#然後就可以將整個資料集放入imputer中
imputer.fit(data)
imputer 計算出了每個屬性的中位數,並將結果儲存在了例項變數 statistics_ 中,可以通過imputer.statistics_檢視
imputer.statistics_
array([ -118.51 , 34.26 , 29. , 2119. , 433. , 1164. , 408. , 3.5414])
>>> data.median().values
array([ -118.51 , 34.26 , 29. , 2119. , 433. , 1164. , 408. , 3.5414])
通過fit後的imputer()對資料集進行轉換,將缺失值替換為中位數
x = imputer.transform(data)
結果是乙個包含轉換後特徵的普通的 numpy 陣列。如果你想將其放回到pandas dataframe 中,也很簡單
data_= pd.dataframe(x, columns=data.columns)
可能會比較糾結的就是scikit-learn 設計方面,為什麼又要 fit() 又要transfrom()
scikit-learn 設計的 api 設計的非常好。它的主要設計原則是:
一致性:所有物件的介面一致且簡單:
估計器(estimator):任何可以基於資料集對一些引數進行估計的物件都被稱為估計器(比如, imputer 就是個估計器)。估計本身是通過 fit() 方法,只需要乙個資料集作為引數(對於監督學習演算法,需要兩個資料集;第二個資料集包含標籤)。任何其它用來指導估計過程的引數都被當做超引數(比如 imputer 的 strategy ),並且超引數要被設定成例項變數(通常通過構造器引數設定)。
轉換器(transformer)。一些估計器(比如 imputer )也可以轉換資料集,這些估計器被稱為轉換器。api也是相當簡單:轉換是通過 transform() 方法,被轉換的資料集作為引數。返回的是經過轉換的資料集。轉換過程依賴學習到的引數,比如 imputer 的例子。所有的轉換都有乙個便捷的方法 fit_transform() ,等同於呼叫 fit() 再 transform() (但有
時 fit_transform() 經過優化,執行的更快)。
**器(predictor)。最後,一些估計器可以根據給出的資料集做**,這些估計器稱為**器。例如,上一章的 linearregression 模型就是乙個**器:它根據乙個國家的人均 gdp **生活滿意度。**器有乙個 predict() 方法,可以用新例項的資料集做出相應的**。**器還有乙個 score() 方法,可以根據測試集(和相應的標籤,如果是監督學習演算法的話)對**進行衡器。可檢驗。所有估計器的超引數都可以通過例項的public變數直接訪問(比如, imputer.strategy ),並且所有估計器學習到的引數也可以通過在例項變數名後加下劃線來訪問(比如, imputer.statistics_ )。類不可擴散。資料集被表示成 numpy 陣列或 scipy 稀疏矩陣,而不是自製的類。超引數只是普通的 python 字串或數字。可組合。盡可能使用現存的模組。例如,用任意的轉換器序列加上乙個估計器,就可以做成乙個流水線,後面會看到例子。合理的預設值。scikit-learn 給大多數引數提供了合理的預設值,很容易就能建立乙個系統。
Pandas 缺失值處理
二 處理缺失值 首先拿到乙份資料,以dataframe提取後,要檢視缺失值的情況 import pandas as pd df pd.read csv df.isnull 獲得true,false的返回值 df.isnull sum 判斷缺失的數量常用此介面來快速判斷各特徵的缺失值情況!df.dro...
Pandas缺失值處理
判斷資料是否為nan pd.isnull df pd.notnull df 判斷缺失值是否存在 np.all pd.notnull data 返回false代表有空值 np.any pd.isnull data 返回true代表有空值處理方式 2 替換缺失值 fillna value,inplace...
Pandas中的缺失值處理
相信大家在處理資料的時候經常會發現有一些資料的缺失,這個時候便會很頭大,因為有時候的缺失的資料是本來就沒有的,這些資料不管就好了,有的資料雖然沒有,但是也可以根據一些資料推算出來這個資料是多少然後給它填上,但是有的資料缺失是隨機缺失的完全不知道應該怎麼處理,所以呢今天我就帶大家了解一下資料中的缺失值...