關於缺失值填充的方法

2021-09-21 12:57:47 字數 2010 閱讀 1873

**: 背景

很多資料不可避免的會遺失掉,或者採集的時候採集物件不願意透露,這就造成了很多nan(not a number)的出現。這些nan會造成大部分模型執行出錯,所以對nan的處理很有必要。

方法1、簡單粗暴地去掉

有如下dataframe,先用df.isnull().sum()檢查下哪一列有多少nan:

import pandas as pd

df = pd.dataframe()

print (df)

print (df.isnull().sum())

輸出: 

將含有nan的列(columns)去掉:

data_without_nan =df.dropna(axis=1)

print (data_without_nan)

輸出: 

2、遺失值插補法

很多時候直接刪掉列會損失很多有價值的資料,不利於模型的訓練。所以可以考慮將nan替換成某些數,顯然不能隨隨便便替換,有人喜歡替換成0,往往會畫蛇添足。譬如調查工資收入與學歷高低的關係,有的人不想透露工資水平,但如果給這些nan設定為0很顯然會失真。所以python有個imputation(插補)的方法,其中 的演算法不細究。**如下:

from sklearn.preprocessing import imputer

my_imputer = imputer()

data_imputed = my_imputer.fit_transform(df)

print (type(data_imputed))

# array轉換成df

df_data_imputed = pd.dataframe(data_imputed,columns=df.columns)

print (df_data_imputed)

輸出: 

可以看出,這裡大概是用平均值進行了替換。

3、推廣的遺失值插補法

這個推廣的思想是nan本身具有一定資料價值,譬如不愛說自己工資的被調查者是不是有什麼共性,這個時候就不能簡單的只用上面的插補法,要增加幾列,將nan的情況記錄下來作為新的資料:

# 先複製乙份愛怎麼玩怎麼玩

new_data = df.copy()

# 增加有nan的布林列(true/false)

cols_with_missing = (col for col in new_data.columns

if new_data[col].isnull().any())

for col in cols_with_missing:

new_data[col + '_was_nan'] = new_data[col].isnull()

print (new_data)

# imputation

my_imputer = imputer()

new_data_imputed = my_imputer.fit_transform(new_data)

# array轉換成df

df_new_data_imputed = pd.dataframe(new_data_imputed,columns=new_data.columns)

print (df_new_data_imputed)

輸出:

缺失值處理 缺失值填充方法總結

我們在進行模型訓練時,不可避免的會遇到某些特徵出現空值的情況,下面整理了幾種填充空值的方法 對於特徵值缺失的一種常見的方法就是可以用固定值來填充,例如0,9999,9999,例如下面對灰度分這個特徵缺失值全部填充為 99 data 灰度分 data 灰度分 fillna 99 對於數值型的特徵,其缺...

Pandas 缺失值填充的方法

重新載入原始資料 titanic df pd.read csv titanic.csv 計算所有人年齡的均值 age median1 titanic df.age.median 使用fillna填充缺失值,inplace true表示在原資料titanic df上直接進行修改 titanic df....

python缺失值填充

對於特徵值缺失的一種常見的方法就是可以用固定值來填充。data 分數 data 分數 fillna 1 對於數值型的特徵,其缺失值也可以用未缺失資料的均值填充。data 分數 data 分數 fillna data 分數 mean 與均值類似,可以用未缺失資料的眾數來填充缺失值。data 分數 da...