【问题标题】:Reading data from text file with missing values从文本文件中读取缺失值的数据
【发布时间】:2012-05-28 00:52:39
【问题描述】:

我想从有很多缺失值的文件中读取数据,如下例所示:

1,2,3,4,5
6,,,7,8
,,9,10,11

我正在使用 numpy.loadtxt 函数:

data = numpy.loadtxt('test.data', delimiter=',')

问题在于缺失值破坏了 loadtxt(我得到一个 “ValueError: could not convert string to float:”,毫无疑问是因为两个或多个连续的分隔符)。

有没有办法通过 loadtxt 或其他函数自动执行此操作,还是我必须硬着头皮手动解析每一行?

【问题讨论】:

    标签: python numpy python-2.7


    【解决方案1】:

    这是因为该函数希望返回一个 numpy 数组,其中包含所有相同类型的单元格。

    如果您想要一个包含混合字符串和数字的表格,您应该将其读入结构化数组,您可能还想添加 skip_header=1 以跳过第一行,即在您的情况下类似于:

    np.genfromtxt('upeak_names.txt', delimiter="\t", dtype="S10,S10,f4,S10,f4,S10,f4", 
    names=["id", "name", "Distance", "name2", "Distance2", "name3", "Distance3], skip_header=1)
    

    另见:

    【讨论】:

      【解决方案2】:

      请注意,根据我的测试,没有检测到字符单元,只检测到数值,所以如果你有一个包含字符串和数字的表格,应该有其他方法。

      我的例子:

      upeak_names.txt:
      id  name    Distance    name2   Distance2   name3   Distance3
      upeak-3 NOC2L   -161    KLHL17  -1135   NOC2L   -162
      
      >>>table= genfromtxt('upeak_names.txt', delimiter="\t")
      >>>comb_table[2,]
      >>>array([   nan,    nan,  -161.,    nan, -1135.,    nan,  -162.])
      

      【讨论】:

        【解决方案3】:

        我可能会使用genfromtxt:

        >>> from numpy import genfromtxt
        >>> genfromtxt("missing1.dat", delimiter=",")
        array([[  1.,   2.,   3.,   4.,   5.],
               [  6.,  nan,  nan,   7.,   8.],
               [ nan,  nan,   9.,  10.,  11.]])
        

        然后对 nans 做任何事情(将它们更改为某些东西,使用掩码代替等)其中一些可以内联完成:

        >>> genfromtxt("missing1.dat", delimiter=",", filling_values=99)
        array([[  1.,   2.,   3.,   4.,   5.],
               [  6.,  99.,  99.,   7.,   8.],
               [ 99.,  99.,   9.,  10.,  11.]])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 1970-01-01
          • 2018-08-08
          相关资源
          最近更新 更多