尽管有以上问题的建议:

-9999 as missing value with numpy.genfromtxt()

Using genfromtxt to import csv data with missing values in numpy

我仍然无法处理以缺少的值结尾的文本文件,

a.txt:

1 2 3
4 5 6
7 8

我尝试了missing_valuesfilling_values选项的多种安排,但无法正常工作:
import numpy as np

sol = np.genfromtxt("a.txt",
                    dtype=float,
                    invalid_raise=False,
                    missing_values=None,
                    usemask=True,
                    filling_values=0.0)
print sol

我想得到的是:
[[1.0 2.0 3.0]
 [4.0 5.0 6.0]
 [7.0 8.0 0.0]]

但是我得到了:
/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py:1641: ConversionWarning: Some errors were detected !
    Line #3 (got 2 columns instead of 3)
  warnings.warn(errmsg, ConversionWarning)
[[1.0 2.0 3.0]
 [4.0 5.0 6.0]]

最佳答案

问题是numpy不喜欢破烂的数组。由于文件最后一行的第三位没有字符,因此genfromtxt甚至不知道该解析什么,更不用说处理它了。如果缺失值包含填充符(任何填充符),例如:

1 2 3
4 5 6
7 8 ''

然后,您将能够:
sol = np.genfromtxt("a.txt",
                dtype=float,
                invalid_raise=False,
                missing_values='',
                usemask=False,
                filling_values=0.0)

和:
溶胶
array([[  1.,   2.,   3.],
       [  4.,   5.,   6.],
       [  7.,   8.,  nan]])

不幸的是,如果不能使文件的列统一,则可能会逐行进行解析。

另一种可能性是,如果所有“短”行都位于末尾……在这种情况下,您可以利用“usecols”标志来解析所有统一的列,然后使用skip_footer标志进行相同的操作对于剩余的列,同时跳过不可用的列:
sol = np.genfromtxt("a.txt",
                dtype=float,
                invalid_raise=False,
                usemask=False,
                filling_values=0.0,
                usecols=(0,1))
sol
array([[ 1.,  2.],
   [ 4.,  5.],
   [ 7.,  8.]])

sol2 = np.genfromtxt("a.txt",
                dtype=float,
                invalid_raise=False,
                usemask=False,
                filling_values=0.0,
                usecols=(2,),
                skip_footer=1)
sol2
array([ 3.,  6.])

然后从那里组合数组,添加填充值:
sol2=np.append(sol2, 0.0)
sol2=sol2.reshape(3,1)
sol=np.hstack([sol,sol2])
sol
array([[ 1.,  2.,  3.],
   [ 4.,  5.,  6.],
   [ 7.,  8.,  0.]])

关于python - 使用numpy.genfromtxt填充缺失值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17307299/

10-11 22:32
查看更多