python - Numpy 掩码数组 - 指示缺失值

标签 python arrays numpy

import numpy as np
import numpy.ma as ma

"""This operates as expected with one value masked"""
a = [0., 1., 1.e20, 9.]
error_value = 1.e20
b = ma.masked_values(a, error_value)
print b

"""This does not, all values are masked """
d = [0., 1., 'NA', 9.]
error_value = 'NA'
e = ma.masked_values(d, error_value)
print e

如何使用“nan”、“NA”、“None”或一些类似的值来指示缺失数据?

最佳答案

您是从文本文件或类似文件中获取数据吗?如果是这样,我建议使用 genfromtxt函数直接指定您的屏蔽值:

In [149]: f = StringIO('0.0, 1.0, NA, 9.0')

In [150]: a = np.genfromtxt(f, delimiter=',', missing_values='NA', usemask=True)

In [151]: a
Out[151]:
masked_array(data = [0.0 1.0 -- 9.0],
             mask = [False False  True False],
       fill_value = 1e+20)

我认为您的示例中的问题是您用来初始化 numpy 数组的 python 列表具有异构类型( float 和字符串)。这些值被强制转换为 numpy 数组中的字符串,但是 masked_values函数使用浮点相等产生奇怪的结果。

这是通过创建具有对象 dtype 的数组来克服此问题的一种方法:

In [152]: d = np.array([0., 1., 'NA', 9.], dtype=object)

In [153]: e = ma.masked_values(d, 'NA')

In [154]: e
Out[154]:
masked_array(data = [0.0 1.0 -- 9.0],
             mask = [False False  True False],
       fill_value = ?)

您可能更喜欢第一个解决方案,因为结果具有 float 数据类型。

关于python - Numpy 掩码数组 - 指示缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6555101/

相关文章:

c# - 数组分割场景

python - 在 Python 中从数组中提取特定值

python - 删除矩阵 subview 中的第一个元素

python - numpy python 类调用错误的 __setitem__

python - 具有大型 .dta 文件的 Pandas read_stata()

python - 在元组列表中查找元素

python - 高效统计 NumPy 中唯一子数组的出现次数?

python - 在 R 中使用 igraph 绘制图形 : edge length proportional to weight

arrays - 如何根据正则表达式过滤每个数组元素

javascript - 基于另一个数组并组合过滤数组