轉眼國慶假期已經過去,實在不想投身工作啊。祖國母親,咱們再過個農曆生日可好,讓我們再為你慶生幾天。一想到2018年已無法定節假日,還是收拾心情,開始認真搬磚吧。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CN5UWNzEjM4UmZiJzY3MDMxMTYhBjMwQDMlJGM1QWNm9CXyAzLcFDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
前言
原因
資料缺失在資料處理的過程中十分常見,其原因有很多,主要可以總結為三大類:
無意的:資訊被遺漏,例如資料采集過程的故障導緻資料缺失,例如記錄過程的缺失等。
有意的:有些資料集的特征描述中将缺失值作為特征值。
不存在:有些資料的特征屬性本身不存在。
類型
資料缺失的類型可以分為以下三類:
完全随機損失(missing completely at random,MCAR):資料的缺失完全是随機的,不依賴于任何不完全變量或完全變量。
随機缺失(missing at random,MAR):資料的缺失不是完全随機的,依賴于其他完全變量。
非随機缺失(missing not at random:MNAR):指的是資料的缺失依賴于不完全變量自身。
處理方式
缺失資料的處理方法包括:删除記錄、資料插補和不處理。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CN5UWNzEjM4UmZiJzY3MDMxMTYhBjMwQDMlJGM1QWNm9CXyAzLcFDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
處理方法
pandas的設計目标之一就是讓缺失資料的處理任務盡量輕松,pandas使用浮點值NaN表示浮點和非浮點數組中的缺失資料。
生成資料集
删除記錄
使用pandas的dropna直接删除有缺失值的特征,該方法是根據各标簽中的值是否存在缺失資料對軸标簽進行過濾。
dropna預設删除任何含有缺失值得行:
傳入how='any'将隻丢棄全為NaN的行:
要用這種方式丢棄列,隻需傳入axis=1即可。
對于一個Series,dropna傳回一個僅含非空資料和索引值的Series。
判斷缺失情況
pandas采用isnull和notnull方法,傳回一個含有布爾值的對象,這些布爾值表示哪些值是缺失值。
獲得含有缺失資料的列采用如下方法:
說明a、b、c、d、e列均含有缺失值。
獲得全部為缺失資料的列的方法如下:
說明a、b、c、d、e列均不是全部為NA值的列。
填充缺失資料
有時候,并不希望删除記錄,需要通過某種方法來填充缺失資料。fillna方法是最主要的函數。
其參數主要說明如下:
value:用于填充缺失值的标量值或字典對象
method : 插值方式(ffill或bfill),如果函數調用時未指定其他參數的話,預設為“ffill”
axis :待填充的軸,預設axis=0
inplace :修改調用者對象而不産生副本
limit :(對于前向和後向填充)可以連續填充的最大數量
通過一個常數調用fillna将缺失值替換為那個常數值。例如将所有缺失值替換為0:
通過一個字典調用fillna,就可以實作對不同列填充不同的值。例如對a列填充常數1,對b列填充常數0.5:
方法ffill代表後向填充,limit代表填充的最大數量:
也可以采用均值、中位數或衆數插補: