机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。

SimpleImputer 函数参数解释

参数 含义&输入
missing_values 告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan
strategy 我们填补缺失值的策略,默认均值。
输入”mean”使用均值填补(仅对数值型特征可用)
输入”median”用中值填补(仅对数值型特征可用)
输入”most_frequent”用众数填补(对数值型和字符型特征都可用)
输入”constant”表示请参考参数”fill_value”中的值(对数值型和字符型特征都可用)
fill_value 当参数startegy为 constant 的时候可用,可输入字符串或数字表示要填充的值,常用0
copy 默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。

代码实现

  1. import pandas as pd
  2. # 创建一个带缺失值的矩阵
  3. data = pd.DataFrame([[10, None], [10, '男'], [None, '女'], [35, '男']], columns=['年龄', '性别'])
  4. data.head()
  5. # 提取年龄数组
  6. Age = data.loc[:,"年龄"].values.reshape(-1,1) # sklearn当中特征矩阵必须是二维
  7. # 实例化模型
  8. from sklearn.impute import SimpleImputer
  9. imp_mean = SimpleImputer() # 实例化,默认均值填补
  10. imp_median = SimpleImputer(strategy="median") # 用中位数填补
  11. imp_0 = SimpleImputer(strategy="constant", fill_value=0) # 用0填补
  12. # 缺失值的处理
  13. imp_mean = imp_mean.fit_transform(Age) # fit_transform 一步完成调取结果
  14. imp_median = imp_median.fit_transform(Age)
  15. imp_0 = imp_0.fit_transform(Age)
  16. # 在这里我们使用中位数填补年龄
  17. data.loc[:, "年龄"] = imp_median
  18. data.head()
  19. #使用众数填补
  20. imp_mode = SimpleImputer(strategy = "most_frequent")
  21. data.loc[:,"年龄"] = imp_mode.fit_transform(Age)
  22. data.head()
  1. import pandas as pd
  2. # 创建一个带缺失值的矩阵
  3. data = pd.DataFrame([[10, None], [10, '男'], [None, '女'], [35, '男']], columns=['年龄', '性别'])
  4. data.head()
  5. # .fillna 在DataFrame里面直接进行填补
  6. data.loc[:,"年龄"] = data.loc[:,"年龄"].fillna(data.loc[:,"年龄"].median())
  7. # .dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
  8. # 参数inplace,为True表示在原数据集上进行修改,为False表示生成一个复制对象,不修改原数据,默认False
  9. data.dropna(axis=0, inplace=True)