numpy关于文件中数据为混合类型的时候的读取

来源:互联网 发布:邪恶漫画软件大全 编辑:程序博客网 时间:2024/06/07 23:31

转载自:https://codeday.me/bug/20171015/87046.html



python – 如何使用numpy.genfromtxt当第一列是字符串,其余的列是数字?

基本上,我有一堆数据,其中第一列是一个字符串(标签),其余的列是数值。我运行以下:

data = numpy.genfromtxt('data.txt', delimiter = ',')

这读取大部分数据,但是标签列只是“nan”。我该如何处理?

默认情况下,np.genfromtxt使用dtype = float:这就是为什么字符串列被转换为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 aarray([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '<i8'),('f2', '<i8')])

您可以使用其名称访问列,如[‘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', '<i8'), ('f2', '<f8')])

使用显式dtype比使用dtype = None要有效得多,并且是推荐的方式。

在这两种情况下(dtype = None或explicit,非同质dtype),你最终得到一个结构化数组。

[注意:使用dtype = None,输入被第二次解析,并且每个列的类型被更新以匹配可能的更大的类型:首先我们尝试一个bool,然后一个int,然后一个float,然后一个复杂,然后我们如果所有其他失败,保留一个字符串。实现是相当。,。有一些尝试使类型猜测更有效率(使用regexp),但没有停留到目前为止]

http://stackoverflow.com/questions/12319969/how-to-use-numpy-genfromtxt-when-first-column-is-string-and-the-remaining-column

python – 如何使用numpy.genfromtxt当第一列是字符串,其余的列是数字?

基本上,我有一堆数据,其中第一列是一个字符串(标签),其余的列是数值。我运行以下:

data = numpy.genfromtxt('data.txt', delimiter = ',')

这读取大部分数据,但是标签列只是“nan”。我该如何处理?

默认情况下,np.genfromtxt使用dtype = float:这就是为什么字符串列被转换为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 aarray([('a',1,2),('b',3,4)], dtype=[('f0', '|S1'),('f1', '<i8'),('f2', '<i8')])

您可以使用其名称访问列,如[‘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', '<i8'), ('f2', '<f8')])

使用显式dtype比使用dtype = None要有效得多,并且是推荐的方式。

在这两种情况下(dtype = None或explicit,非同质dtype),你最终得到一个结构化数组。

[注意:使用dtype = None,输入被第二次解析,并且每个列的类型被更新以匹配可能的更大的类型:首先我们尝试一个bool,然后一个int,然后一个float,然后一个复杂,然后我们如果所有其他失败,保留一个字符串。实现是相当。,。有一些尝试使类型猜测更有效率(使用regexp),但没有停留到目前为止]

http://stackoverflow.com/questions/12319969/how-to-use-numpy-genfromtxt-when-first-column-is-string-and-the-remaining-column
阅读全文
0 0