缺失值填充

缺失值填充

拿到的数据或多或少都不是立即可以用的,对于一些可能因为各种主观或者客观原因导致缺失的情况我们需要进行缺失值处理,尽可能地保留更多地数据。

多重插补法

(1)插补: 将不完整数据集缺失的观测行估算填充m次。请注意,填充值是从某种分布中提取的。模拟随机抽取并不包含模型参数的不确定性。更好的方法是采用马尔科夫链蒙特卡洛模拟(MCMC,Markov Chain Monte Carlo Simulation)。这一步骤将生成m个完整的数据集。
(2)分析: 分别对(m个)每一个完整数据集进行分析。
**(3)合并:**对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。

python 复制代码
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)

平均值法

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

python 复制代码
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个值加权平均来估计该样本的缺失数据。

python 复制代码
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