我正在尝试将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参与其中。
有人可以推荐一种让这项工作的方法吗?
答案 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