numpy数组的混合类型列表

pxiryf3j  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(111)

我有从csv导入的数据,它们存储在列表列表中:

data=[['1', ' 1.013831', ' 1.713332', ' 1.327002', ' 3.674446', ' 19.995361', ' 09:44:24', ' 2.659884'], ['2', ' 1.013862', ' 1.713164', ' 1.326761', ' 3.662183', ' 19.996973', ' 09:49:27', ' 2.668791'], ['3', ' 1.013817', ' 1.712084', ' 1.326192', ' 3.658077', ' 19.997608', ' 09:54:27', ' 2.671786']]

我想得到一个numpy数组,这样我就可以真正使用正确的切片(我不想要pandas或其他任何东西,只是普通的旧numpy数组与适当的数据类型-不是对象)。
所以我试了一个显而易见的方法:

arr=np.array(data,dtype='i4,f4,f4,f4,f4,f4,U8,f4')

只为得到:

ValueError: invalid literal for int() with base 10: ' 1.013831'

这表明numpy将行视为列,将列视为行。该怎么办呢?我还尝试输入而不是datalist(map(tuple,data)),这给出了map object is not callable和我尝试的错误:

arr=np.asarray(tuple(map(tuple,data)),dtype='i4,f4,f4,f4,f4,f4,U8,f4')

ValueError: could not assign tuple of length 20 to structure with 8 fields.

注意,在我的例子中,原始的行数是20。
那么,如何将数据从csv导入numpy数组,并指定每列的数据类型?

aij0ehis

aij0ehis1#

根据文档中的示例,

np.array(list(map(tuple, data)), dtype='i4,f4,f4,f4,f4,f4,U8,f4')

输出量:

array([(1, 1.013831, 1.713332, 1.327002, 3.674446, 19.995361, ' 09:44:2', 2.659884),
       (2, 1.013862, 1.713164, 1.326761, 3.662183, 19.996973, ' 09:49:2', 2.668791),
       (3, 1.013817, 1.712084, 1.326192, 3.658077, 19.997608, ' 09:54:2', 2.671786)],
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<f4'), ('f6', '<U8'), ('f7', '<f4')])
f
1

相关问题