python处理数据中缺失值

(1)直接删除法(当缺失值个数只占整体很小一部分时)
在采用删除法处理缺失值时,需要首先检测样本总体中确实值得的个数。python中统计缺失值的方法为:

import numpy as np import pandas as pd #读取数据,将空值形式的缺失值转换为可识别的类型 data = https://www.it610.com/article/pd.read_csv('data.csv',encoding='GBK') #用NaN代替空值 data = https://www.it610.com/article/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 = https://www.it610.com/article/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({1:0.5,3:-1}) #第一列用0.5填充,第三列用-1填充 #fillna默认返回新对象,可以使用inplace参数实现对现有对象直接进行修改 #new_data = https://www.it610.com/article/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 = https://www.it610.com/article/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 = https://www.it610.com/article/pd.DataFrame(fill_knn) print(data.head())

【python处理数据中缺失值】

    推荐阅读