2016-03-07 74 views
0

我準備將一些數據導入到R中。數據正在從Python導出到CSV文件中。 R的讀取數據作爲只因爲numpy的陣列被導出到CSV包括周圍它像這樣括號具有兩列:使用無托架的Numpy陣列將多行寫入CSV?

loudness_momentary,"[-83.84079859 -83.67103055 -83.80533271]" 

我認爲正在生成的問題,因爲當我寫數據到CSV ,有一個「清單列表中」發生的事情,像這樣:

data = [ 
    ['loudness_momentary', loudness_momentary], 
    ['loudness_short', loudness_short], 
    ['loudness_integrated', loudness_integrated], 
    ['lra', lra], 
    ['crest_factor_1s', crest_factor_1s], 
    ['crest_factor_100ms', crest_factor_100ms], 
    ['spectral_centroid', spectral_centroid], 
    ['spectral_spread', spectral_spread], 
    ['spectral_skewness', spectral_skewness], 
    ['spectral_kurtosis', spectral_kurtosis], 
    ['zcr', zcr], 
    ['spectral_rolloff', spectral_rolloff], 
    ['spectral_crest_factor', spectral_crest_factor], 
    ['spectral_flatness', spectral_flatness], 
    ['spectral_flux', spectral_flux] 
    ] 

    # Write to CSV File 
    with open(filepath + "/" + file_name + ".csv", "wb") as stem_data: 
     w = csv.writer(stem_data, delimiter=',') 
     print "Writing %s to csv" % file_name 
     w.writerows(data) 
    stem_data.close() 

我在這裏的目標是給各行的「頭」,讓我知道數據是什麼。如果我刪除「列表中的列表」問題並只寫入一行,則數據正常寫入。所以基本上,我試圖輸出一個CSV文件的每一行的「字符串」標題,其中後面的每一行都是一個沒有括號或引號的numpy數組,所以我可以很好地將它放入R中。

任何幫助將不勝感激,謝謝。

回答

0

轉換data到一個列表的列表:

data = [[row[0]]+row[1].tolist() for row in data] 

例如,如果data開始就像這樣

In [34]: data = [['foo', np.array([1,2,3])], ['bar', np.array([1,2,3])]] 

然後

In [35]: data = [[row[0]]+row[1].tolist() for row in data] 

轉換data到列表名單:

In [36]: data 
Out[36]: [['foo', 1, 2, 3], ['bar', 1, 2, 3]] 

順便說一句,這是件好事,你正在使用的with-statement打開該文件。但請注意,當執行流程離開with-block時,Python會自動關閉該文件。因此在離開with-block後明確地呼叫stem_data.close()是不必要的。

+0

對不起,我的錯。 'row [1:]'返回一個包含NumPy數組的列表。我應該使用'row [1]'來代替。 – unutbu

+0

是的,這工作,非常感謝你! – Rdotyung