转载自:https://codeday.me/bug/20171015/87046.html
data = numpy.genfromtxt('data.txt', delimiter = ',')
这读取大部分数据,但是标签列只是“nan”。我该如何处理?
您可以要求np.genfromtxt尝试通过使用dtype = None来猜测列的实际类型:
>>> from StringIO import StringIO
>>> test = "a,1,2\nb,3,4"
>>> a = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)
>>> print a
array([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '),('f2', ')])
您可以使用其名称访问列,如[‘f0’] …
使用dtype = None是一个好的技巧,如果你不知道你的列应该是什么。如果你已经知道他们应该有什么类型,你可以给一个明确的dtype。例如,在我们的测试中,我们知道第一列是一个字符串,第二列是一个int,我们想要第三个是一个float。然后我们会使用
>>> np.genfromtxt(StringIO(test), delimiter=",", dtype=("|S10", int, float))
array([('a', 1, 2.0), ('b', 3, 4.0)],
dtype=[('f0', '|S10'), ('f1', '), ('f2', ')])
使用显式dtype比使用dtype = None要有效得多,并且是推荐的方式。
在这两种情况下(dtype = None或explicit,非同质dtype),你最终得到一个结构化数组。
[注意:使用dtype = None,输入被第二次解析,并且每个列的类型被更新以匹配可能的更大的类型:首先我们尝试一个bool,然后一个int,然后一个float,然后一个复杂,然后我们如果所有其他失败,保留一个字符串。实现是相当。,。有一些尝试使类型猜测更有效率(使用regexp),但没有停留到目前为止]
data = numpy.genfromtxt('data.txt', delimiter = ',')
这读取大部分数据,但是标签列只是“nan”。我该如何处理?
您可以要求np.genfromtxt尝试通过使用dtype = None来猜测列的实际类型:
>>> from StringIO import StringIO
>>> test = "a,1,2\nb,3,4"
>>> a = np.genfromtxt(StringIO(test), delimiter=",", dtype=None)
>>> print a
array([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '),('f2', ')])
您可以使用其名称访问列,如[‘f0’] …
使用dtype = None是一个好的技巧,如果你不知道你的列应该是什么。如果你已经知道他们应该有什么类型,你可以给一个明确的dtype。例如,在我们的测试中,我们知道第一列是一个字符串,第二列是一个int,我们想要第三个是一个float。然后我们会使用
>>> np.genfromtxt(StringIO(test), delimiter=",", dtype=("|S10", int, float))
array([('a', 1, 2.0), ('b', 3, 4.0)],
dtype=[('f0', '|S10'), ('f1', '), ('f2', ')])
使用显式dtype比使用dtype = None要有效得多,并且是推荐的方式。
在这两种情况下(dtype = None或explicit,非同质dtype),你最终得到一个结构化数组。
[注意:使用dtype = None,输入被第二次解析,并且每个列的类型被更新以匹配可能的更大的类型:首先我们尝试一个bool,然后一个int,然后一个float,然后一个复杂,然后我们如果所有其他失败,保留一个字符串。实现是相当。,。有一些尝试使类型猜测更有效率(使用regexp),但没有停留到目前为止]