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)    收藏  举报

导航