【问题标题】:How do you deal with missing data using numpy/scipy?你如何使用 numpy/scipy 处理丢失的数据?
【发布时间】:2010-11-25 12:22:51
【问题描述】:

我在数据清理中处理得最多的事情之一就是缺失值。 R 使用其“NA”缺失数据标签很好地处理了这个问题。在 python 中,似乎我将不得不处理屏蔽数组,这似乎是一个主要的痛苦设置并且似乎没有很好的文档记录。关于在 Python 中简化此过程的任何建议?这正在成为转移到 Python 进行数据分析的交易破坏者。谢谢

更新 显然我已经有一段时间没有查看 numpy.ma 模块中的方法了。似乎至少基本的分析函数可用于掩码数组,并且提供的示例帮助我理解了如何创建掩码数组(感谢作者)。我想看看Python中一些较新的统计方法(在今年的GSoC中正在开发)是否包含了这方面,并且至少做了完整的案例分析。

【问题讨论】:

  • 为什么不使用 numpy.NaN 来识别缺失数据?

标签: python numpy data-analysis


【解决方案1】:

如果您愿意考虑一个库,pandas (http://pandas.pydata.org/) 是一个建立在 numpy 之上的库,其中包括:

智能数据对齐和缺失数据的集成处理:在计算中获得基于标签的自动对齐,并轻松将杂乱的数据处理成有序的形式

我在金融行业使用它已经快一年了,在这个行业,丢失和错误对齐的数据是常态,它确实让我的生活更轻松。

【讨论】:

    【解决方案2】:

    我也质疑屏蔽数组的问题。以下是几个例子:

    import numpy as np
    data = np.ma.masked_array(np.arange(10))
    data[5] = np.ma.masked # Mask a specific value
    
    data[data>6] = np.ma.masked # Mask any value greater than 6
    
    # Same thing done at initialization time
    init_data = np.arange(10)
    data = np.ma.masked_array(init_data, mask=(init_data > 6))
    

    【讨论】:

      【解决方案3】:

      正如 DpplerShift 所描述的,掩码数组就是答案。为了快速而肮脏的使用,您可以使用带有布尔数组的精美索引:

      >>> import numpy as np
      >>> data = np.arange(10)
      >>> valid_idx = data % 2 == 0 #pretend that even elements are missing
      
      >>> # Get non-missing data
      >>> data[valid_idx]
      array([0, 2, 4, 6, 8])
      

      您现在也可以使用 valid_idx 作为其他数据的快速掩码

      >>> comparison = np.arange(10) + 10
      >>> comparison[valid_idx]
      array([10, 12, 14, 16, 18])
      

      【讨论】:

        【解决方案4】:

        sklearn.preprocessing.Imputer

        import numpy as np
        from sklearn.preprocessing import Imputer
        imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
        imp.fit([[1, 2], [np.nan, 3], [7, 6]])
        X = [[np.nan, 2], [6, np.nan], [7, 6]]
        print(imp.transform(X))  
        

        来自http://scikit-learn.org/的示例

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-18
          • 2020-10-03
          • 2015-05-31
          • 1970-01-01
          • 2021-04-27
          • 1970-01-01
          相关资源
          最近更新 更多