删除含有缺失值的列
展开数据中含有缺失值的列
cols_with_missing = [col for col in data.columns if data[col].isnull().any()]
删除列
reduced_data= data.drop(cols_with_missing, axis=1)
SimpleImputer
参数解释
- missing_values:int, float, str, (默认)np.nan或是None, 即缺失值是什么。
- strategy:空值填充的策略,共四种选择(默认)mean、median、most_frequent、constant。constant表示将空值填充为自定义的值,但这个自定义的值要通过fill_value来定义。
- fill_value:str或数值,默认为Zone。当strategy == "constant"时,fill_value被用来替换所有出现的缺失值(missing_values)。fill_value为Zone,当处理的是数值数据时,缺失值(missing_values)会替换为0,对于字符串或对象数据类型则替换为"missing_value" 这一字符串。
- verbose:int,(默认)0,控制imputer的冗长。
- copy:boolean,(默认)True,表示对数据的副本进行处理,False对数据原地修改。
- add_indicator:boolean,(默认)False,True则会在数据后面加入n列由0和1构成的同样大小的数据,0表示所在位置非缺失值,1表示所在位置为缺失值。
from sklearn.impute import SimpleImputer
#进行插补
my_imputer = SimpleImputer()
data_new=pd.DateFrame(my_imputer.fit_transform(data)
#如果划分了数据集用以下方式
imputed_X_train = pd.DataFrame(my_imputer.fit_transform(X_train))
imputed_X_valid = pd.DataFrame(my_imputer.transform(X_valid))
# 复制列名
imputed_X_train.columns = X_train.columns
imputed_X_valid.columns = X_valid.columns
插补扩展
插补缺失值,同时跟踪插补的值
#复制数据集
X_train_plus = X_train.copy()
X_valid_plus = X_valid.copy()
# 创建新的列
for col in cols_with_missing:
X_train_plus[col + '_was_missing'] = X_train_plus[col].isnull()
X_valid_plus[col + '_was_missing'] = X_valid_plus[col].isnull()
# 进行插补
my_imputer = SimpleImputer()
imputed_X_train_plus = pd.DataFrame(my_imputer.fit_transform(X_train_plus))
imputed_X_valid_plus = pd.DataFrame(my_imputer.transform(X_valid_plus))
# 复制列名
imputed_X_train_plus.columns = X_train_plus.columns
imputed_X_valid_plus.columns = X_valid_plus.columns