缺失值是指數據集中的某些觀測存在遺漏的指標值,缺失值的存在同樣會影響到數據分析和挖掘的結果。
一般而言,當遇到缺失值是可以采三種方法處置:刪除法,替換法和插補法。
1.刪除法使用情況:當確實的觀測比例非常低是,如5%以內,可以直接刪除這些缺失的變量。
2.替換法:用某種直接替換缺失值,例如,對連續變量而言,可以使用均值或中位數替換,對於離散型變量,可以使用眾數替換。
3.插補法:是指根據其他非確實的變量或觀測來預測缺失值,常用的插補法有回歸插補法,K近鄰法,拉格朗日插補法等。
下面我們介紹兩種比較常見的缺失值處理方法,刪除法和替換法
例:
原數據:
從表中可以看出,該數據集存在4條缺失觀測,行號分別是4,6,7和9,11。接下來我們要做的是如何判斷數據集是否存在缺失值(盡管記錄少的時候可以清楚地發現)
import pandas as pd
df= pd.read_excel(r'd:/data_test05.xlsx')
print('數據集中是否存在缺失值:\n',any(df.isnull()))
OUT:
True
刪除操作:
df.dropna() #刪除缺失值所在的行
df.drop('age',axis = 1) #選擇某具體的列刪除
替換操作:
df.fillna(method = 'ffill') #用前一行的數據來替換空白 助記詞:front
df.fillna(method = 'bfill') #用后一行數據來替換空內容 助記詞:backward fill填充
df.fillna(value = 0) #指定用某個值來填充所有的空白內容 該方法慎用,典型的以點概面的方式,很容易造成數據混亂
df.fillna(value = {'gender':df.gender.mode()[0],'age':df.age.mean(), #這里面gender 使用的是眾數替換,age 使用均值替換,income 使用中位數替換
'income':df.income.median()}) #value = 后面用的是字典, mode()[0] 因為眾數可能存在多個,所以mode()返回的其 #實是一個序列,mode(0)表示,取第一個眾數。參考摘選的補充說明:
**** 如上代碼並沒有實際改變df數據框的結果,因為dropna,drop和fillna方法並沒有使inplace參數設置為True。因此我們在實際工作中,先預覽處理效果,然后再把inplace參數設置為True,進而真正地改變你所處理的數據集:
補充說明:
本篇涉及內容小結: