将混合numpy数组类型写入文件

时间:2017-07-28 19:06:09

标签: python arrays python-3.x numpy

我正在尝试将3列数据数组写入文本文件。每行都有一个关联的日期和时间作为字符串包含在另一个数组中。

例如:

>>> data 
array([[0, 1, 9],
       [1, 1, 2],
       [2, 4, 2],
       [7, 3, 2],
       [2, 2, 7],
       [1, 0, 5]])

>>> dates
array([['2017-07-28T12:00:00'],
       ['2017-07-28T12:01:00'],
       ['2017-07-28T12:02:00'],
       ['2017-07-28T12:03:00'],
       ['2017-07-28T12:04:00'],
       ['2017-07-28T12:05:00']], 
      dtype='<U19')

我正在尝试使用 numpy.savetxt 将字符串和数据写入文件。根据以上数据,输出文件应如下所示:

'2017-07-28T12:00:00', 0, 1, 9
'2017-07-28T12:01:00', 1, 1, 2
'2017-07-28T12:02:00', 2, 4, 2
'2017-07-28T12:03:00', 7, 3, 2
'2017-07-28T12:04:00', 2, 2, 7
'2017-07-28T12:05:00', 1, 0, 5

不幸的是,我无法弄清楚如何正确加入字符串和数字数据以使用savetxt。我已经尝试连接数组,将它们连接在元组中,堆叠它们等等,但解决方案整天都提到了我。理想情况下,我想坚持使用numpy并且不要在循环中逐行破解或者让Pandas参与其中。

有人可以推荐一种让这项工作的方法吗?

1 个答案:

答案 0 :(得分:2)

由于您想要堆叠列(例如将两个数组粘合在一起),您需要使用np.column_stack()。但是,生成的数组具有不同的数据类型,这会在调用np.savetxt()时导致一些问题。因此,作为一个快速的解决方案,我提供了fmt=%s参数来使用string formatter

import numpy as np

a = np.array([
        [0, 1, 9],
        [1, 1, 2],
        [2, 4, 2],
        [7, 3, 2],
        [2, 2, 7],
        [1, 0, 5]
    ])

b = np.array([
        ['2017-07-28T12:00:00'],
        ['2017-07-28T12:01:00'],
        ['2017-07-28T12:02:00'],
        ['2017-07-28T12:03:00'],
        ['2017-07-28T12:04:00'],
        ['2017-07-28T12:05:00']
    ])

out = np.column_stack([b, a])

np.savetxt('output.txt', out, delimiter='\t', fmt="%s")

输出看起来像这样(由delimiter='\t'分隔的标签):

2017-07-28T12:00:00 0   1   9
2017-07-28T12:01:00 1   1   2
2017-07-28T12:02:00 2   4   2
2017-07-28T12:03:00 7   3   2
2017-07-28T12:04:00 2   2   7
2017-07-28T12:05:00 1   0   5