尊敬的讀者您好:筆者很高興自己的文章能被閱讀,但原創與編輯均不易,所以轉載請必須註明本文出處並附上本文地址超鏈接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若覺得本文對您有益處還請幫忙點個贊鼓勵一下,筆者在此感謝每一位讀者,如需聯繫筆者,請記下郵箱:[email protected],謝謝合作!
一、缺失值填補
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
日積月累,與君共進,增增小結,未完待續。