簡體   English   中英

你如何使用 numpy/scipy 處理丟失的數據?

[英]How do you deal with missing data using numpy/scipy?

我在數據清理中最常處理的一件事是缺失值。 R 使用其“NA”缺失數據標簽很好地處理了這個問題。 在 python 中,似乎我將不得不處理掩碼數組,這似乎是設置的主要痛苦並且似乎沒有很好的文檔記錄。 關於在 Python 中簡化此過程的任何建議? 這正在成為使用 Python 進行數據分析的一大障礙。 謝謝

更新自從我查看 numpy.ma 模塊中的方法以來,顯然已經有一段時間了。 看來至少基本的分析函數可用於掩碼數組,並且提供的示例幫助我了解如何創建掩碼數組(感謝作者)。 我想看看Python中的一些較新的統計方法(在今年的GSoC中開發)是否包含了這方面的內容,並且至少做了完整的案例分析。

如果你願意考慮一個庫,pandas (http://pandas.pydata.org/) 是一個建立在 numpy 之上的庫,它提供了許多其他東西:

智能數據對齊和缺失數據的集成處理:在計算中獲得基於標簽的自動對齊,輕松將凌亂的數據處理成有序的形式

我已經在金融行業使用它將近一年了,在這個行業中,丟失和不一致的數據是常態,它確實讓我的生活更輕松。

我也質疑掩碼數組的問題。 下面是幾個例子:

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

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

參見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/ 的示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM