kaggle教程--4--缺失值处理
1 Python将缺失值定义为nan,意思是not a number
2 查看所有列中,每个列有几个空值
missing_val_count_by_column = (home_data.isnull().sum())
print(missing_val_count_by_column)
print(missing_val_count_by_column[missing_val_count_by_column > 0])
3 用缺失值建模,包括scikit-learn在内的很多库都会报错
4 处理缺失值的方法
4.1 删除包含空值的列
4.1.1 直接删除所有包含空值的列
data_without_missing_values = original_data.dropna(axis=1)
4.1.2 先定位有空值的列有哪些,存于变量cols_with_missing中,然后分别在训练数据和测试数据中删除这些列,保持两个数据集在列方面的一致
cols_with_missing = [col for col in original_data.columns if original_data[col].isnull().any()]
reduced_original_data = original_data.drop(cols_with_missing, axis=1)
reduced_test_data = test_data.drop(cols_with_missing, axis=1)
直接删除列的方法不常用,一般用于该列中大部分值都是空值的情况
4.2 插补法
from sklearn.impute import SimpleImputer
my_imputer = SimpleImputer()
data_with_imputed_values = my_imputer.fit_transform(original_data)
上述代码默认的参数时在空值处插入列的均值。其它更复杂的插入方法,一般来说对建模的好处并不多
4.3 插补法扩展
# make copy to avoid changing original data (when Imputing)
#为了保护原数据不被破坏,复制一份
new_data = original_data.copy()
# make new columns indicating what will be imputed
#找到所有包含任意空值的列(也就是说,这一列中哪怕有一个空值都算),存入generator变量cols_with_missing中
cols_with_missing = (col for col in new_data.columns if new_data[col].isnull().any())
#用col在generator变量cols_with_missing中迭代,给每个含有空值的列col构造一个新的列,col + '_was_missing',其中存放的值,是该列在每一行是否为空,例如col列数据为[1,2,NAN],则col + '_was_missing'列的值为[false,false,true]
for col in cols_with_missing:
      new_data[col + '_was_missing'] = new_data[col].isnull()
# Imputation----------------------------------------------------这部分没有调通,后面继续看,kernel:exercise-explore-your-data
my_imputer = SimpleImputer()
new_data = pd.DataFrame(my_imputer.fit_transform(new_data))
new_data.columns = original_data.columns
查看某一列有多少个空值
print(new_data['LotFrontage'].isnull().sum())
posted on 2019-02-27 15:58 wangzhonghan 阅读(371) 评论(0) 收藏 举报
                    
                
                
            
        
浙公网安备 33010602011771号