1、检测缺失值
查看一下数据(数据集已处理为pandas.dataframe)
dataset.describe() #查看数据的大体情况
dataset.isnull() #查看是否是缺失值
dataset.isnull().any() #判断哪些"列"存在缺失值
dataset[dataset.isnull().values==True] #只显示存在缺失值的行列
如果发现有缺失值要对缺失值进行分析,输出每个列丢失值也即值为NaN的数据和,并从多到少排序
total = dataset.isnull().sum().sort_values(ascending=False)
print(total)
统计缺失值的比例
total = dataset.isnull().sum().sort_values(ascending=False)
percent =(dataset.isnull().sum()/dataset.isnull().count()).sort_values(ascending=False)
missing_data = dataset.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)
2、处理缺失值
处理缺失值时根据缺失值的具体情况有两种策略
(1)删除缺失值(忽略有缺失值的样本)
可以选择忽略有缺失特征的列。
#去掉整列
dataset= dataset.drop(['Embarked'], axis = 1)
在缺失的行数比较少的情况下应仅仅忽略出现缺失的那几行
#去掉这个特征为空的行
dataset_new = dataset.drop(dataset[dataset['Embarked'].isnull()].index)
#返回已经去掉重复行的数据集
dataset.drop_duplicates()
(2)填补缺失值
使用特殊值来填补缺失值,特殊值的选取需要根据情况来判断。
# 缺失值补充为'-1'
dataset['Embarked'] = dataset['Embarked'].fillna('-1')
# 使用中位数填补
dataset['Embarked'] = dataset['Embarked'].fillna(dataset['Embarked'].median())
# 使用众数填补
dataset['Embarked'] = dataset['Embarked'].fillna(dataset['Embarked'].mode().values)
# 使用平均数填补
dataset['Embarked'] = dataset['Embarked'].fillna(dataset['Embarked'].mean())
sklearn的Imputer类提供了补全缺失值的基本策略:
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1,2], [np.nan,3], [7,6]])
X = [[np.nan,2], [6, np.nan], [7,6]]
imp.transform(X)