numpy中的genfromtxt函数导入数据后产生空字符串

4

感谢您的耐心等待,因为我对Python还很陌生。输入文件是一个以制表符分隔的表格。

import numpy as np
#from StringIO import StringIO

inputfile=raw_input('Filepath please: ')

fieldnames='Reference Position, Type, Length, Reference, Allele, Linkage, Zygosity, \
    Count, Coverage, Frequency, Hyper-allelic, Forward/reverse balance, Average quality, \
    Overlapping annotations, Coding region change, Amino acid change'
fieldtypes='int,str,int,str,str,str,str,int,int,float,str,float,float,str,str,str'

with open(inputfile) as f:
    storage=np.genfromtxt(f, skip_header=1, delimiter='\t', names=fieldnames, dtype=fieldtypes)

print storage

我得到了一个 ValueError: size of tuple must match number of fields(元组的大小必须与字段数相匹配) 的错误信息。
需要帮助吗?
修改:
实现@Wooble的建议后,错误不再出现...
但现在的问题是,在我打印存储(storage)之后,所有dtype为str的单元格都是空字符串('')。这是为什么?
EDIT3: 我通过将上面的str类型更改为|S#,其中#是一个整数,解决了空字符串问题。

1
输入文件中有什么?(顺便说一下,使用StringIO来存储真实文件的内容有点傻。当你需要一个类似文件的对象但没有真实文件时才使用StringIO。)而且,在上下文管理器中打开的文件不要使用.close()关闭;整个上下文管理器的目的就是关闭它。 - Wooble
1
请使用 raw_input 而不是使用 input 并告诉用户包含引号... - Wooble
感谢@Wooble的帮助。我正在根据您的建议进行编辑。此外,输入文件是一个制表符分隔的文本表格。 - michen00
这个制表符分隔的表格中有空单元格... 这会影响到什么吗? - michen00
另外:如果你正在使用命名列和混合数字和非数字数据,那么使用pandas比裸的numpy更容易成功。 - DSM
1个回答

1

但现在的问题是,当我打印 storage 后,所有 dtype 为 str 的单元格都为空字符串 ('')。为什么会这样呢?

编辑3: 我通过将上面的 str 类型更改为 |S#(其中 # 是整数)来解决了空字符串问题。

编辑4: 请看下面 Jinan Dangor 的评论。


1
请问您在这里指的整数是什么?是正在读取的字符串的最大长度还是其他? - Jinan Dangor
字段类型 = 'int,|S1,int,|S2,|S3等等'。 。 。因为这是很久以前的事了,我不确定我还记得,但这是我最好的猜测。 - michen00
1
解决了这个问题后,数字就是读取的字符串的最大长度。它不仅仅是连续编号系统。因此,'|S64' 读取最多 64 个字符的字符串。 - Jinan Dangor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接