(1)直接刪除法(當缺失值個數只佔整體很小一部分時)
在採用刪除法處理缺失值時,需要首先檢測樣本總體中確實值得的個數。python中統計缺失值的方法為:
import numpy as np
import pandas as pd
#讀取資料,將空值形式的缺失值轉換為可識別的型別
data = pd.read_csv('data.csv',encoding='gbk')
#用nan代替空值
data = data.replace(' ',np,nan)
print(data.columns)#['id','label','a','b','c','d']
#將每列的缺失值個數統計出來
null_all = data.isnull().sum()
#isnull函式檢查資料是否有缺失返回布林值,元素為空或者nan返回ture,否則就是false
#data.isnull().any()判斷哪些列包含缺失值,該列存在缺失值則返回true,反之false
#data.isnull().sum()返回每列缺失值的數量
#檢視a列缺失值的資料
a_null = data[pd.isnull(data['a'])]
#a列缺失值佔的比重
a_ratio = len(data[pd.isnull(data['a'])])/len(data)#0.007
#缺失值所佔的比重較小,丟棄缺失值,將存在缺失值的行丟棄
new_drop = data.dropna(axis=0)#(9981,6)
print(new_drop.shape)
#dropna()預設axis=0,刪除帶有空值的行(只要有乙個就刪除整行),axis=1刪除帶有空值的列
#dropna(how='all')整行都是空值時,才會被刪除
#dropna(thresh=2),thresh設定閾值,缺失值個數大於該閾值整行(axis=0)或整列(axis=1)才會被刪除
#丟棄某幾列有缺失值的行
new_drop2 = data.dropna(axis=0,subset=['a','b'])#a和b列沒有缺失值,所以不刪除元素
print(new_drop2.shape)#(9990,6)
(2)使用乙個全域性常量填充缺失值
#用0填充缺失值
fill_data = data.fillna(0)
print(fill_data.isnull().sum())
#用乙個數字填充缺失值df.fillna(0)
#用前乙個資料代替缺失值:method='pad';
#用後乙個資料代替缺失值:method='bfill';df.finall(method='bfill')
#用乙個字串代替缺失值,df.fillna('unknow')
#使用描述性統計的值代替缺失值,例如使用平均值代替缺失值
#df.fillna(df.mean())
#finall函式也實現不同的列,用不同的值進行填充,df.finall()
#第一列用0.5填充,第三列用-1填充
#fillna預設返回新物件,可以使用inplace引數實現對現有物件直接進行修改
#new_data = df.finall(0,inplace=true)
(3)使用統計數字進行填充
#均值填充
data['a'] = data['a'].finall(data['a'].means())
#中位數填充
data['a'] = data['a'].finall(data['a'].median())
#眾數填充
data['a'] = data['a'].finall(stats.mode(data['a'])[0][0])
#用前乙個數字填充
data['a'] = data['a'].finall(method='pad')
#用後乙個數字填充
data['a'] = data['a'].finall(method='bfill')
imputer提供了缺失值處理的基本策略,比如使用缺失值所在的行或者列的均值,中位數,眾數來代替缺失值
from sklearn.preprocessing import imputer
imr = imputer(missing_values='nan',strategy='mean',axis=0)
imr = imr.fit(data.values)
imputed_data = pd.dataframe(imr.transform(data.values))
print(imputed_data[0:15])
#strategy預設平均值填充,可選'median'(中位數),'most_frequent'(眾數)
#指定軸向axis=0(預設列向);axis = 1,行向
#copy 預設true:建立資料集的副本;false:在任何地方都可以進行插值
(4)插值法,knn填充
4.1 插值法
interpolate()插值法,計算缺失值前乙個和後乙個值的平均數
data['a'] = data['a'].interpolate()
4.2 knn填充
from fancyimpute import knn
fill_knn = knn(k=3).fit_transform(data)
data = pd.dataframe(fill_knn)
print(data.head())
資料缺失值處理
步驟 1.識別缺失值 2.分析缺失的原因 3.檢視缺失值情況 4.處理缺失值 識別判斷缺失值 is.na 識別矩陣或資料框中的完整觀測 complete.cases any is.na data 檢查是否存在缺失值 head is.na data col1 5 檢視資料data中col1列前5個資料...
字段缺失 Python資料預處理 缺失值 重複值
一 缺失值處理 isnull fillna dropna 1 檢視 檢視資料集缺失,返回每列的缺失個數 df.isnull sum 檢視某字段有缺失的行 df df.a.isnull 檢視某欄位每行的缺失情況 返回t f df.score.isnull 返回0 1 df.score.isnull a...
Python 中的缺失值及其處理
缺失值處理用到的主要工具為 numpy 庫和 pandas庫中的有關函式,要匯入 numpy 和 pandas import numpy as np import pandas as pd 在 python 中,特殊的常量 none 通常被理解為缺失值的一種,我們構建了乙個包含有 none 的 nu...