Numpy重新编码缺失数据

2 投票
2 回答
2217 浏览
提问于 2025-04-16 23:17

我正在使用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 数组,这样才能正常工作。

撰写回答