我有下面的示例文件(test.csv),第一行是标题:
#a |b |c
foo |fooo |foooo
bar |barr |barrr
命令:
numpy.loadtxt('test.csv', delimiter='|', dtype=str)
效果很好。输出为
array([['foo ', 'fooo ', 'foooo'],
['bar ', 'barr ', 'barrr']], dtype='<U5')
但是,如果我尝试为列指定名称:
numpy.loadtxt('test.csv', delimiter='|', dtype=[('a', str), ('b', str), ('c', str)])
我得到:
array([('', '', ''), ('', '', '')],
dtype=[('a', '<U'), ('b', '<U'), ('c', '<U')])
与使用genfromtxt自动推断名称相同:
numpy.genfromtxt('test.csv', delimiter='|', names=True, dtype=str)
输出
array([('', '', ''), ('', '', '')],
dtype=[('a', '<U'), ('b', '<U'), ('c', '<U')])
即使名称被正确识别。我做错了什么?我肯定我错过了一些明显的东西。
3条答案
按热度按时间oxcyiej71#
用
dtype=None
可以推断字段的数据类型;使用
names=True
,它从第一行推断字段名称(注解与否)没有名字,它是一个2d数组(跳过注解行):
genfromtxt
非常灵活,但需要很多参数。基本上,它将数据加载为列表的列表(由分隔符分隔的字符串)。然后,它将从中构建数组。因此,对如何从列表的列表和dtype构造数组的一些理解会有所帮助。正如我评论的:
编辑
显式字段名称:
iyfjxgzm2#
如果你想使用列名,我建议使用pandas。
如果要修复列名和值中的前导空格和尾随空格,可以执行以下操作:
4uqofj5v3#
如果你坚持使用numpy,那么你可以这样做: