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

2024-04-30 01:39:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据清理中,我处理得最多的事情之一就是丢失值。R使用它的“NA”缺失的数据标签处理这口井。在python中,我将不得不处理屏蔽数组,这似乎是一个需要设置的主要问题,而且似乎没有很好的文档记录。关于在Python中简化这个过程有什么建议吗?这正在成为进入Python进行数据分析的交易破坏者。谢谢

更新显然已经有一段时间没有查看numpy.ma模块中的方法了。似乎至少基本的分析函数可以用于屏蔽数组,并且提供的示例帮助我理解了如何创建屏蔽数组(感谢作者)。我想看看Python中的一些较新的统计方法(正在今年的GSoC中开发)是否包含了这一方面,并且至少进行了完整的案例分析。


Tags: 数据方法文档numpy过程记录交易标签
3条回答

正如DpplerShift所描述的,屏蔽阵列是anwswer。为了快速和不方便地使用,您可以使用布尔数组的特殊索引:

>>> 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])

现在也可以使用有效的idx作为其他数据的快速掩码

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

如果您愿意考虑一个库,pandas(http://pandas.pydata.org/)是一个建立在numpy之上的库,它提供了许多其他功能:

Intelligent data alignment and integrated handling of missing data: gain automatic label-based alignment in computations and easily manipulate messy data into an orderly form

在金融行业,我已经用了将近一年的时间了,在那里,数据丢失和不一致是常态,这真的让我的生活更轻松。

我也质疑屏蔽阵列的问题。下面是几个例子:

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))

相关问题 更多 >