尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作!
一、缺失值填补
1、读取文档,获取df
## load data
df = pd.read_csv("./data/all_available_features.txt", sep='\001', header=0)
## 将数据按列存放
df.columns = ["unionid","gender", "big_room", "big_room_ratio", "single_room", "single_room_ratio", "standard_room", "standard_room_ratio", "family_room", "family_room_ratio", "superior_room", "superior_room_ratio", "other_room", "other_room_ratio", "all_room", "summer_holiday", "summer_holiday_ratio", "winter_holiday", "winter_holiday_ratio", "minor_holiday", "minor_holiday_ratio", "weekend_holiday", "weekend_holiday_ratio", "other_holiday", "other_holiday_ratio", "mem_basic", "mem_outgoing", "mem_marriage", "mem_education", "mem_certification", "mem_stayArea", "mem_stayCity", "mem_age", "mem_sex", "mem_assets", "mem_constellation", "mem_social_stratum", "mem_area", "mem_city", "mem_career",
"mem_birthday", "mem_mail", "label"]
2、通过df来处理缺失值
① df.mean() 是指对每列进行求平均数
df.fillna(value = df.mean(), inplace = True)
注:df.mean()等价于df.mean(0)。把轴向数据求平均,得到每列数据的平均值。
df.mean(1)按照另外一个axis的方向来求平均,得到每行数据的平均值。
② 用中位数进行填补
df.fillna(value = df.median(), inplace = True)
③ 用众数予以填补,注众数可能有多个,因此在填充的时候可以进行选择第一个进行填充
df.fillna(value = df.mode()[0], inplace = True)
④ 用最大值予以填补
df.fillna(value = df.max(), inplace = True)
⑤ 用最小值予以填补
df.fillna(value = df.min(), inplace = True)
⑥ 自定义数值予以填充
df.fillna(value = 10, inplace = True)
⑦ 前向填充,填充前一条数据的值,但是前一条也不一定有值
df.fillna(method='ffill')
⑧ 向后填充,填充后一条数据的值,但是后一条也不一定有值
df.fillna(method = 'bfill')
二、缺失值剔除
将具有缺失值的样本进行剔除,进而得到一个没有缺失值的样本集。该方法简单易行,在单个样本有多个属性缺失值、且在样本集中占比非常小的情况下是行之有效的。然而,该方法是以减少样本数目来换取信息的完备,因而会造成资源的大量浪费,丢弃了大量隐藏在这些对象中的信息。若样本集中本来包含的样本量很少,删除少量样本就足以严重影响到样本集中信息的客观性和结果的正确性;当每个属性空值的百分比变化很大时,它的性能非常差。因此,当遗漏数据所占比例较大,特别当遗漏数据非随机分布时,这种方法可能导致数据发生偏离,从而引出错误的结论。
三、缺失值不处理
有些机器学习模型对样本中缺失值可自行处理,例如树模型中的RF和Xgboost等。
推荐阅读:
【1】https://blog.csdn.net/jingyi130705008/article/details/82670011
日积月累,与君共进,增增小结,未完待续。