2014-01-15 194 views
1

我正在嘗試使用csv.writer對象將一個numpy數組寫入一個csv文件。但寫完後,我得到了我的numpy數組的字符串表示形式!Python:如何將int32寫入csv文件?

with open('res.csv', 'w') as csvfile: 
    csv_writer = csv.writer(csvfile, delimiter=',', lineterminator='\n') 
    csv_writer.writerow(['Id', 'Solution'])  
    csv_writer.writerows(y_pred) 

res.csv的一些輸出線:

Id,Solution 
1,0 
2,1 
3,1 
4,0 
... 

但他們作爲字符串存儲!

其實我通過Kaggel site努力學習蟒蛇,但我提交res.csv文件後,在排行榜上說,我的條目是在string格式,並且要在int32格式。

我該如何解決?

+3

CSV文件確實是字符串,也許你不應該包含頭文件?嘗試刪除'csv_writer.writerow(['Id','Solution'])'行。 –

+1

是的,沒有標題!但標題必須在那裏。如果我刪除標題代碼,我必須手動將它添加到res.csv文件! – Hadi

+1

你可以嘗試使用['numpy.savetxt()'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html)嗎? –

回答

1

試試這個:

numpy.savetxt('res.csv', y_pred, fmt='%d', delimiter=',', newline='\n', header='Id, Solution', footer='', comments='# ') 

此輸出:

$ cat res.csv 
# Id, Solution 
1,0 
2,1 
3,1 
4,0 

您可以通過fmt關鍵字設置的格式字符串轉換格式。請參閱numpy.savetxt()。您也可以更改評論符號。

+0

我試過了(但是用fmt ='%d'),但是在它的條目中Id前有一個#號?! – Hadi

+0

設置'comment ='''但也許你想註釋掉標題?如果kaggel使用['numpy.loadtxt'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html),那麼它會跳過標題,如果它被註釋掉了,然後它會自動加載數字爲'int32',否則,您需要提供'skiprows'關鍵字。 –

1

你可以這樣做:

np.savetxt('test.txt', a, fmt='%d', delimiter=',', 
      header='Id,Solution', comments='') 

如果要指定comments=''避免默認註釋「#」前置到頁眉(頁腳)弦(see here)的開始。