删除或估算缺失值?

数据挖掘 熊猫 数据清理
2022-03-08 01:27:07

我正在使用具有 45k 行的数据集,我对是否删除缺失值或估算缺失值有点困惑。

逐列缺失值分布:

缺失 val 分布

根据这个答案:https ://stackoverflow.com/a/28199556/12298398 ),我计算了包含缺失值的行数

>>> np.count_nonzero(df.isnull().values.ravel())
2057

但是现在我对是否应该删除这些包含缺失值的行有点困惑,因为删除它们会导致数据丢失,或者我应该估算那些缺失值大于 500 的列。

让我知道你的想法,谢谢

1个回答

在大多数情况下,仅当您有大量 nan 值时,删除数据才有意义。例如,您有一个具有 98% nan 值的特征,它对任何算法都没有多大用处。由于您没有太多数据可以继续,因此估算该功能也不起作用。

但是如果存在合理数量的 nan 值,那么最好的选择是尝试估算它们。有两种方法可以估算 nan 值:-

1. 单变量插补:您使用具有 nan 值的特征本身来插补 nan 值。技术包括均值/中值/众数插补,但建议不要使用这些技术,因为它们会扭曲特征的分布。其他技术可能包括创建一个新功能来捕获该功能的缺失。你应该用谷歌搜索这个主题,因为实际上有数百篇文章和博客。

2. 多元插补:顾名思义,您使用多列来插补特定特征/列中的 nan 值。这种方法是最优选的,因为它比单变量插补产生更好的插补结果。一些最常用的技术是KNNImputerIterativeImputerGoogle 再次成为您最好的朋友!

底线是,仅当您的功能占多数时,如果它的值为 nan,则仅删除 nan 值。如果不是,通常最好进行估算。

干杯!