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

时间:2009-09-04 03:44:57

标签: python r numpy data-analysis

我在数据清理中处理最多的事情之一是缺少值。 R使用其“NA”缺失数据标签处理此井。在python中,似乎我将不得不处理掩盖的数组,这些数组似乎是一个很大的痛苦,并且似乎没有很好的记录。有关在Python中简化此过程的任何建议吗?这正在成为进入Python进行数据分析的一个突破。感谢

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

4 个答案:

答案 0 :(得分:4)

如果你愿意考虑一个图书馆,pandas(http://pandas.pydata.org/)是一个建立在numpy之上的图书馆,它提供了许多其他内容:

  

智能数据对齐和缺失数据的集成处理:在计算中获得基于标签的自动对齐,并轻松地将凌乱的数据处理成有序的形式

我在金融行业已经使用了差不多一年的时间,这些数据缺失和严重排列是常态,它确实让我的生活变得更轻松。

答案 1 :(得分: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))

答案 2 :(得分:1)

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

您现在可以使用valid_idx作为其他数据的快速掩码

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

答案 3 :(得分:0)

请参阅sklearn.preprocessing.Imputer

import numpy as np
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(X))  

来自http://scikit-learn.org/

的示例