探索性数据分析之缺失值检测与处理

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)

你可能感兴趣的:(探索性数据分析之缺失值检测与处理)