Kaggle:House Prices: Advanced Regression Techniques--数据缺失值处理

数据缺失值处理

1.导入数据

import pandas as pd

X = pd.read_csv('train.csv')
Y = pd.read_csv('test.csv')

2.查看数据

X.info()

3.计算每列的缺失率,并按缺失率降序排序

null_num = X.shape[0] - X.count() #计算每列的缺失数
null_num_rate = null_num / X.shape[0] #缺失率
null_num_df = pd.concat([null_num, null_num_rate],axis=1)
null_num_df.columns=['num','rate']

null_num_df = null_num_df.sort_values(by = ['rate'], ascending = False) #对缺失率降序排序

4. 直接删除缺失率多的标签

X=X.drop(['PoolQC','MiscFeature','Alley','Fence','FireplaceQu'],axis=1)

5. 对指定的列填充缺失值‘None’

col=['GarageType','GarageQual','GarageCond','GarageFinish','BsmtExposure','BsmtFinType2','BsmtQual','BsmtCond','BsmtFinType1']
X[col]=X[col].fillna('None')

6. 其中GarageYrBlt为车库的年份,用房子的建造年份来替代

X.loc[X['GarageYrBlt'].isnull(),'GarageYrBlt']=X[X['GarageYrBlt'].isnull()]['YearBuilt']

7. 用中位数替换‘LotFrontage’的缺失值

X.loc[X['LotFrontage'].isnull(),'LotFrontage']=X['LotFrontage'].mean(skipna=True)

8. 变量 MasVnrType 外墙装饰材料
这个变量对价钱的影响应该不大,MasVnrType中的NA用它本身的None来代替

X['MasVnrType']=X['MasVnrType'].fillna('None')

9. 变量 MasVnrArea 外墙装饰材料的面积
这个缺失值对应着MasVnrType的None值,应该将NA用0来替代

X['MasVnrArea']=X['MasVnrArea'].fillna(0)

10. 变量 Utilities 没有区分度,直接丢弃

X=X.drop('Utilities',axis=1)

11. 变量 BsmtFullBath BsmtHalfBath BsmtFinSF1 BsmtFinSF2 BsmtUnfSF TotalBsmtSF GarageCars GarageArea 则是由于不存在相应的设施而缺失,这些变量都是数字变量,所以都补充为0即可。

cols=['BsmtFullBath','BsmtHalfBath','BsmtFinSF1','BsmtFinSF2','BsmtUnfSF','TotalBsmtSF','GarageCars','GarageArea']
X[cols]=X[cols].fillna(0,axis=1)

12. 变量MSZoning,Functional,Exterior1st,Exterior2nd,KitchenQual,Electrical,SaleType

这些变量都是因子变量,并且只有几个缺失值,直接用最多的因子(出现频率最高的)来代替

def select(x):
    #print(x)
    a=x.mode().values[0]
    
    return x.fillna(a)
X[cols]=X[cols].apply(fun)

 

你可能感兴趣的:(Kaggle:House Prices: Advanced Regression Techniques--数据缺失值处理)