Numpy重新编码缺失数据
我正在使用matplotlib的cvs2rec函数读取人口普查数据,这个函数运行得很好,给我返回了一个不错的ndarray。
但是,有几个列的所有值都是“none”,并且数据类型是|04。这在我加载到Atpy时造成了问题,出现了“TypeError: object of NoneType has no len()”的错误。像'9999'或者其他缺失值对我来说就可以了。在这种情况下,掩码(Mask)是没用的,因为我把真实的数组传给ATPY,而它不会转换掩码。numpy中的Put函数也不能处理none值,而我认为这是改变值的最佳方法。我觉得某种布尔数组可能是解决办法,但我就是搞不定。
那么,有什么好的、快速的方法可以把none值和/或未初始化的numpy数组改成像'9999'这样的值,或者其他的重新编码呢?不使用掩码。
谢谢,
马修
2 个回答
0
在进行计算时,你可以使用一个叫做“掩码数组”的东西。当你把这个数组传给ATPY时,可以使用掩码数组的filled(9999)方法,这样就能把掩码数组转换成普通数组,里面无效的值会被替换成9999。
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
转换成一个 numpy 数组,这样才能正常工作。