如何处理数据科学中的缺失值
处理 DS 项目中缺失值的三种实用方法
在处理现实世界的数据时,您可能经常会在数据框中发现缺失值。这可能有几个原因,例如:
- 一些测量可能会丢失
- lack of information
- transcript errors
所以问题是:如何处理丢失的数据?我们可以接受 0 作为缺失数据的值吗?我们可以删除缺少数据的行吗?
在本文中,我将向您展示处理缺失数据的三种方法,并回答这些问题。
1. Ask questions
当您在数据集中发现缺失值时,您要做的第一件事就是提出问题,因为通过提出问题,您将理解问题;理解问题是数据科学项目最重要的任务:如果我们不理解问题,我们就无法提供价值。
如果有人向您提供了数据,请向他们提问,例如:
- 你从哪里得到数据的?
- 为什么会有缺失值?
- 这些特征是什么意思?我可以接受 0 作为这些缺失数据的值吗?
如果您自己获得数据,请问自己同样的问题。
此外,谷歌很多。搜索您拥有的缺失数据的参考值,并尝试了解您可以为缺失数据赋予哪个值(记住:即使 0 也是一个值!!)。
此外,如果可以,请尝试联系该领域的专家。例如,如果您正在处理医疗数据集,请联系医生(也许是您的医生!)并询问有关您拥有的数据的问题,尤其是有关您丢失的数据的问题。
2. Dropping rows/columns
在某些情况下,我们可以删除缺失值或 Nans 的列或行(Nan=Not a Number;它甚至可以是“未测量”或“缺失”之类的字符串)。
如前所述,我们必须确保我们在删除这些列/行方面做得很好。例如,在我做的这个项目中,我发现了一些缺失值并决定删除这些行。[0]
让我们分析一下这个案例:这些数据与世界上所有国家的粮食生产年份有关。假设我们的数据框是“df”,这是我发现的:
df.isnull().sum()>>> Area Abbreviation 0
Area Code 0
Area 0
Item Code 0
Item 0
...
Y2009 104
Y2010 104
Y2011 104
Y2012 0
Y2013 0
Length: 63, dtype: int64
对于 2009 年、2010 年和 2011 年,我们有 104 个空值;但此处列出的列并非都具有此数据框的空值;无论如何,如果我们看一下数据,我们可以看到,有些年,在一些国家,粮食生产的价值是 0 吨。这意味着一件简单的事情:无法记录数据,或者在那个特定国家的特定年份,无法生产特定的食物(或者在他们的历史上,他们根本没有在那个特定的国家生产过特定的食物!)。
通过这个简单的分析,我决定使用以下代码删除具有空值的行:
df = df.loc[(df.loc[:, 'Y1961':'Y2013']!=0).any(axis=1)]
3.用均值代替缺失值
有时值 0 根本不可接受,也许因为我们有少量数据,删除行/列不是一种选择。所以,我们能做些什么?一种可能性是将空值替换为同一行/列中其他值的平均值。
例如,在这个项目中,我分析了一个使用机器学习预测糖尿病的数据集。在这种情况下,很容易理解我们不能接受 0 作为 BMI(身体质量指数)或血压的值。由于数据很少,我无法删除任何行。所以,我用同一列中其他值的平均值填充了零;我用下面的代码做到了:[0]
#filling zeros with mean value
non_zero = ['Glucose','BloodPressure','SkinThickness','Insulin','BMI']
for coloumn in non_zero:
diab[coloumn] = diab[coloumn].replace(0,np.NaN)
mean = int(diab[coloumn].mean(skipna = True))
diab[coloumn] = diab[coloumn].replace(np.NaN, mean)
print(diab[coloumn])
这样,我用为其他 BMI 值等计算的平均值替换了 BMI 列中的零。
Conclusions
处理缺失值总是很困难,因为我们必须做出决定,并且在编写实际代码之前必须对这些决定进行深思熟虑。
所以,首先要多问问题和谷歌,试着深入理解问题和你要处理的数据。然后,决定如何处理您的缺失数据(例如,接受空值、删除列/行、用平均值替换缺失值或空值)。
让我们一起连接!
MEDIUM[0]
LINKEDIN(向我发送连接请求)[0]
如果你愿意,你可以订阅我的邮件列表,这样你就可以随时更新![0]
考虑成为会员:您可以免费支持我和像我这样的其他作家。点击此处成为会员。[0]
文章出处登录后可见!