如何使用numpy/scipy处理缺失数据?

11 投票
4 回答
10450 浏览
提问于 2025-04-15 14:04

在数据清理中,我最常遇到的问题就是缺失值。R语言处理这个问题的方法很好,它用“NA”来表示缺失数据。而在Python中,我发现我需要使用“掩码数组”,这设置起来似乎非常麻烦,而且相关文档也不太完善。有没有什么建议可以让这个过程在Python中更简单一些?这让我在转向Python进行数据分析时感到很困扰。谢谢!

更新 显然,我已经有一段时间没有查看numpy.ma模块中的方法了。现在看来,至少一些基本的分析功能是可以用于掩码数组的,提供的例子也帮助我理解了如何创建掩码数组(感谢作者们)。我想看看今年GSoC中开发的一些新的统计方法是否会考虑到这个方面,并且至少能进行完整案例分析。

4 个回答

1

被遮罩的数组就是解决方案,正如DpplerShift所说的那样。为了简单快速地使用,你可以用布尔数组进行花式索引:

>>> import numpy as np
>>> data = np.arange(10)
>>> valid_idx = data % 2 == 0 #pretend that even elements are missing

>>> # Get non-missing data
>>> data[valid_idx]
array([0, 2, 4, 6, 8])

现在你可以把valid_idx当作一个快速的遮罩,来处理其他数据。

>>> comparison = np.arange(10) + 10
>>> comparison[valid_idx]
array([10, 12, 14, 16, 18])
1

我也对带掩码的数组有一些疑问。这里有几个例子:

import numpy as np
data = np.ma.masked_array(np.arange(10))
data[5] = np.ma.masked # Mask a specific value

data[data>6] = np.ma.masked # Mask any value greater than 6

# Same thing done at initialization time
init_data = np.arange(10)
data = np.ma.masked_array(init_data, mask=(init_data > 6))
4

如果你愿意考虑使用一个库,pandas(http://pandas.pydata.org/)是一个建立在numpy基础上的库,它提供了很多功能,其中包括:

智能的数据对齐和缺失数据的处理:在计算中可以自动根据标签进行对齐,并且轻松地将杂乱的数据整理成有序的形式。

我在金融行业使用这个库快一年了,在这个行业,缺失数据和数据对齐不好的情况很常见,它真的让我工作轻松了很多。

撰写回答