尽管有以上问题的建议:
-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_values
和filling_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/