如何使用numpy/scipy处理缺失数据?
在数据清理中,我最常遇到的问题就是缺失值。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基础上的库,它提供了很多功能,其中包括:
智能的数据对齐和缺失数据的处理:在计算中可以自动根据标签进行对齐,并且轻松地将杂乱的数据整理成有序的形式。
我在金融行业使用这个库快一年了,在这个行业,缺失数据和数据对齐不好的情况很常见,它真的让我工作轻松了很多。