2017-07-28 22 views
0

我想寫一個3列數據數組到一個文本文件。每行都有一個包含在另一個數組中的相關日期和時間作爲字符串。寫混合numpy陣列類型到文件

例如:

>>> 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

如果你不這樣做像'%s'回答一樣,考慮列表方法。迭代'行'並格式化,並一次寫入一行。 – hpaulj

回答

2

由於您想堆疊列(如將兩個陣列粘在一起),因此需要使用np.column_stack()。但是,生成的數組具有不同的數據類型,因此在調用np.savetxt()時會導致一些問題。所以,作爲一名quick'n'dirty解決方案,我提供的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 
+1

我期望'out'是一個字符串類型(即將數字轉換爲它們的字符串等價物)。在這種情況下'%s'是唯一的'fmt'選項。沒關係,只要你不需要控制像小數點這樣的東西。使用複合dtype構造一個結構化數組是更多的工作,並且還需要一個fancier'fmt'。 – hpaulj

+0

hpaulj是正確的,最終結束爲一個字符串類型。我上面的例子稍微簡化了,我確實需要控制小數點,所以不幸的是,albert的快速和骯髒的解決方案將無法正常工作。如何創建一個包含可寫入文件的二維數組的複合數據類型? – jgrant