15

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

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 或其他函数自动执行此操作,还是我必须硬着头皮手动解析每一行?

4

3 回答 3

15

我可能会使用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.]])
于 2012-05-21T14:04:41.173 回答
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)

也可以看看:

于 2018-12-19T14:46:47.977 回答
-1

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

我的例子:

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.])
于 2016-06-12T13:06:39.850 回答