2011-08-10 68 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