缺失值填充

ben犇發表於2024-03-26

缺失值填充

拿到的資料或多或少都不是立即可以用的,對於一些可能因為各種主觀或者客觀原因導致缺失的情況我們需要進行缺失值處理,儘可能地保留更多地資料。

多重插補法

(1)插補:將不完整資料集缺失的觀測行估算填充m次。請注意,填充值是從某種分佈中提取的。模擬隨機抽取並不包含模型引數的不確定性。更好的方法是採用馬爾科夫鏈蒙特卡洛模擬(MCMC,Markov Chain Monte Carlo Simulation)。這一步驟將生成m個完整的資料集。
(2)分析:分別對(m個)每一個完整資料集進行分析。
(3)合併:對來自各個填補資料集的結果進行綜合,產生最終的統計推斷,這一推斷考慮到了由於資料填補而產生的不確定性。該方法將空缺值視為隨機樣本,這樣計算出來的統計推斷可能受到空缺值的不確定性的影響。

from fancyimpute import IterativeImputer

file_path = '../Data.xlsx' 

df = pd.read_excel(file_path) # 注意路徑

columns_to_impute = ['xxx', 'xxx', '...']  

# 建立多重插補器
imputer = IterativeImputer()

# 對指定的列進行多重插補
df[columns_to_impute] = imputer.fit_transform(df[columns_to_impute])

df.to_excel('../Data2.xlsx', index=False)

平均值法

如字面意思,用該列的平均值填充該列的缺失。

file_path2 = '../Data.xlsx'

df = pd.read_excel(file_path2)

columns_to_fill_median = ['xxx', 'xxx', '...']

# 將指定列中的空值填充為該列的平均值
for column in columns_to_fill_median:
    mean_value = df[column].mean()
    df[column] = df[column].fillna(mean_value)

output_file_path = '../Data2.xlsx'
df.to_excel(output_file_path, index=False)

KNN法

K最近距離法:先根據歐式距離或相關分析來確定距離具有缺失資料樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失資料。

from sklearn.impute import KNNImputer

file_path2 = '../Data.xlsx' 

df = pd.read_excel(file_path2) # 注意路徑

columns_to_impute = ['xxx', 'xxx', '...']  

imputer = KNNImputer()

df[columns_to_impute] = imputer.fit_transform(df[columns_to_impute])

df.to_excel('../Data_2.xlsx', index=False)

刪除

如果你的資料足夠多,也可以簡單點直接把有空缺值的都刪了。

Reference

Sklearn中有許多填充方法:https://scikit-learn.org/stable/modules/impute.html

相關文章