机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。
SimpleImputer 函数参数解释
参数 | 含义&输入 |
---|---|
missing_values | 告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan |
strategy | 我们填补缺失值的策略,默认均值。 输入”mean”使用均值填补(仅对数值型特征可用) 输入”median”用中值填补(仅对数值型特征可用) 输入”most_frequent”用众数填补(对数值型和字符型特征都可用) 输入”constant”表示请参考参数”fill_value”中的值(对数值型和字符型特征都可用) |
fill_value | 当参数startegy为 constant 的时候可用,可输入字符串或数字表示要填充的值,常用0 |
copy | 默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。 |
代码实现
import pandas as pd
# 创建一个带缺失值的矩阵
data = pd.DataFrame([[10, None], [10, '男'], [None, '女'], [35, '男']], columns=['年龄', '性别'])
data.head()
# 提取年龄数组
Age = data.loc[:,"年龄"].values.reshape(-1,1) # sklearn当中特征矩阵必须是二维
# 实例化模型
from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer() # 实例化,默认均值填补
imp_median = SimpleImputer(strategy="median") # 用中位数填补
imp_0 = SimpleImputer(strategy="constant", fill_value=0) # 用0填补
# 缺失值的处理
imp_mean = imp_mean.fit_transform(Age) # fit_transform 一步完成调取结果
imp_median = imp_median.fit_transform(Age)
imp_0 = imp_0.fit_transform(Age)
# 在这里我们使用中位数填补年龄
data.loc[:, "年龄"] = imp_median
data.head()
#使用众数填补
imp_mode = SimpleImputer(strategy = "most_frequent")
data.loc[:,"年龄"] = imp_mode.fit_transform(Age)
data.head()
import pandas as pd
# 创建一个带缺失值的矩阵
data = pd.DataFrame([[10, None], [10, '男'], [None, '女'], [35, '男']], columns=['年龄', '性别'])
data.head()
# .fillna 在DataFrame里面直接进行填补
data.loc[:,"年龄"] = data.loc[:,"年龄"].fillna(data.loc[:,"年龄"].median())
# .dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
# 参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False
data.dropna(axis=0, inplace=True)