将带空格的字符串作为numpy数组加载

时间:2013-05-21 03:59:00

标签: python csv numpy

我想将csv文件加载为numpy数组。每行包含带空格的字符串字段。 我尝试使用numpy中的loadtxt()和genfromtxt()方法。默认情况下,两种方法都将空格视为分隔符,并将字符串中的每个单词分隔为单独的列。无论如何使用loadtxt()或genfromtxt()来加载这种数据,还是我必须为它编写自己的代码?

我文件中的示例行:

826##25733##Emanuele Buratti## ##Mammalian cell expression

这里##是分隔符,空格表示缺失值。

2 个答案:

答案 0 :(得分:4)

我认为您的问题是默认评论字符#与您的分隔符冲突。我能够像这样加载你的数据:

>>> import numpy as np
>>> np.loadtxt('/tmp/sample.txt', dtype=str, delimiter='##', comments=None)
array(['826', '25733', 'Emanuele Buratti', ' ', 'Mammalian cell expression'], 
      dtype='|S25')

您可以看到dtype已自动设置为最大长度字符串。如果这很麻烦,您可以使用dtype=object。顺便说一句,由于您的数据不是数字,我可能会建议使用csv模块而不是numpy来完成这项工作。

答案 1 :(得分:1)

这是csv等价物,正如wim建议的那样:

import csv

with open('somefile.txt') as f:
    reader = csv.reader(f, delimiter='##')
    rows = list(reader)

由于@wim指出了这些评论,因为分隔符必须是一个字符,所以这不起作用。因此,如果您更改上面的delimiter='#',则会得到结果:

[['826', '', '25733', '', 'Emanuele Buratti', '', ' ', '', 'Mammalian cell expression']]