Python:Numpy Data IO,如何为每列不同的dtype保存数据?

时间:2014-06-16 17:07:11

标签: python numpy

我正在尝试使用numpy.savetxt将数据转储为每列的各种格式。

当数据

data = np.array([[1.111, 2.222, 3.333],
                 [4.444, 5.555, 6.666],
                 [7.777, 8.888, 9.999] ])
np.savetxt('data.txt', data, 
           fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
           delimiter = ',')
一切正常。 但是当数据是:

data = np.array([[1.111, 2.222, 'three'],
                 [4.444, 5.555, 'six'],
                 [7.777, 8.888, 'nine'] ])

np.savetxt('data.txt', data, 
           fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
           delimiter = ',')

它给我一个错误:     fh.write(asbytes(格式%tuple(row)+换行符))     TypeError:%d format:需要一个数字,而不是numpy.string _

有人有线索吗?

2 个答案:

答案 0 :(得分:3)

查看您创建的数组,它看起来像这样:

array([['1.111', '2.222', 'three'],
   ['4.444', '5.555', 'six'],
   ['7.777', '8.888', 'nine']], 
  dtype='<U5')

正如您所看到的,所有元素都是字符串,这就是您遇到错误的原因。 但是,如果您执行此类操作,则应该可以正常工作。

dt = np.dtype("f, f, U5")
data = np.array([(1.111, 2.222, 'three'), # notice that each row had to be a tuple in my case
             (4.444, 5.555, 'six'),
             (7.777, 8.888, 'nine')], dtype=dt)
np.savetxt('data.txt', data, 
           fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
           delimiter = ',')

有关dtypes的更多信息,请点击此处: Data Type Objects

答案 1 :(得分:2)

对于整数,应使用 %d 格式选项代替 %i

np.savetxt('test.txt', data, fmt=['%d', '%.2f', '%s'])

加载数组时,您还应正确指定dtype

np.genfromtxt('test.txt', dtype=[('col1', int), ('col2', float), ('col3', '|S8')])