2011-08-10 112 views
2

我正在閱讀使用matplotlib cvs2rec函數的人口普查數據 - 工作正常給了我一個不錯的ndarray。Recode缺少數據Numpy

但有幾列所有的值都是「none」,其中dtype | 04這是當我陷入Atpy時出現的問題「TypeError:NoneType的對象沒有len()」,像'9999 '或其他缺失會對我有用,在這種情況下,Mask不起作用,因爲我將真實數組傳遞給ATPY,並且它不會轉換MASK。numpy中的Put函數不會使用任何值,這是最好的方法以改變價值(我認爲)我認爲某種布爾陣列是要走的路,但我不能得到它的工作

那麼什麼是一個好/快速的方式來更改任何值和/或未初始化numpy array to'like'9999'or other recode。No Masking。

謝謝,

馬修

回答

3

下面是這個問題的解決方案,但如果你的數據是記錄陣列,你應該只適用此操作將您的列,而不是整個數組:

import numpy as np 
# initialise some data with None in it 
a = np.array([1, 2, 3, None]) 
a = np.where(a == np.array(None), 9999, a) 

請注意,您需要將None投射到一個凹凸陣列中,以便此工作。

+0

嗨Dave,This works great!謝謝 – user531525

+0

不用擔心。順便說一句,如果答案解決了你的問題,那麼「接受」它是好的方式,以便解算者獲得聲望。 – DaveP

+0

我接受了。 – user531525

0

您可以在計算時使用蒙版陣列。當將數組傳遞給ATPY時,可以調用掩碼數組的填充(9999)方法將掩碼數組轉換爲正常數組,並將無效值替換爲9999.

+0

這也是很好的輸入。謝謝 – user531525