【问题标题】:Numpy masked arrays - indicating missing valuesNumpy 掩码数组 - 表示缺失值
【发布时间】:2011-07-02 04:19:38
【问题描述】:
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”或其他类似值来指示缺失数据?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您是从文本文件或类似文件中获取数据吗?如果是这样,我建议直接使用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 列表具有异构类型(浮点数和字符串)。这些值被强制转换为 numpy 数组中的字符串,但 masked_values 函数使用浮点相等产生奇怪的结果。

    这是通过创建具有 object 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 dtype。

    【讨论】:

    • 我想将缺失值信息保留在我的数组中(在内存中)。我使用掩码的目的是使数组可以被平均,忽略缺失值。正如 ma 文档中所指出的, ma 的目的是允许处理具有缺失值或无效值的数据。在真实数据系列“NA”中,“None”或类似的通常用于标记缺失值。 “fill_value”选项是否提供了实现我的目标的任何方法?
    • @Dick:是的,以上两种方法都能满足您的需求。它们都保留了缺少元素 3 的信息(如果您只关心这一点,则 fill_value 并不那么重要)。例如,您可以调用a.mean()e.mean() 并看到结果是3.33。在上面的示例中,您的数据系列用于缺失值的任何字符/字符串都可以代替 'NA'
    【解决方案2】:

    此解决方案有效,它确实会强制创建数组的副本。

    a_true = (a == 'NA')
    
    a[a_true] = 1.e20
    
    a = a.astype(float)
    
    print a
    
    error_value = 1.e20
    
    b = ma.masked_values(a, error_value)
    
    print b
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多