我有一个csv文件,它有前三列这样的
2011,12,25,...
2011,12,26....
2011,12,27,...
...
这些列基本上是年,月和日。其他列包含字符串。总共有100行和6列。我使用numpy.loadtxt
使用
input = numpy.loadtxt('file.csv', dtype='i4, i4, i4, S4, S4, S4', delimiter=',')
问题:据我所知,这个loadtxt操作应该返回一个形状为100x6
的数组。但是,这会返回一个100x1
数组,每个元素都是1x6
的数组。
我希望这是100x6
的普通2D数组。我在网上查了一些资源。似乎由于csv数据中的某些列包含字符串,我必须使用dtype
参数,这导致输入是数组的一维数组而不是二维数组。我已经尝试了这些网站中给出的一些示例,只要CSV文件中的所有条目都是数字,它们似乎都能正常工作
我要找的是
示例CSV文件:
2011,12,25,AAA,AAA,AAA
2011,12,26,BBB,BBB,BBB
2011,12,27,CCC,CCC,CCC
答案 0 :(得分:3)
np.loadtxt
返回一维数组是对的,但您仍然可以访问structured array中实际为字段的“列”:
array([(2011, 12, 25, b'AAA', b'AAA', b'AAA'),
(2011, 12, 26, b'BBB', b'BBB', b'BBB'),
(2011, 12, 27, b'CCC', b'CCC', b'CCC')],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', 'S4'), ('f4', 'S4'), ('f5', 'S4')])
它允许您为字段编制索引,但您需要通过名称(f0
,f1
,f2
...)进行索引。不是索引:
nt['f3']
#>>> array([b'AAA', b'BBB', b'CCC'],
#>>> dtype='|S4')
您当然可以指定dtype
名称:
dtype=[('MEAT', '<i4'), ('CHEESE', '<i4'), ('TOAST', '<i4'), ('BIRD', 'S4'), ('PLANE', 'S4'), ('SOCK', 'S4')]
nt = numpy.loadtxt('/home/joshua/file.csv', dtype=dtype, delimiter=',')
nt['SOCK']
#>>> array([b'AAA', b'BBB', b'CCC'],
#>>> dtype='|S4')
这样做是为了简化非均匀阵列引起的许多并发症。