2014-01-15 5 views
1

Я пытаюсь написать массив numpy в файл csv, используя объект csv.writer. Но после записи я получил строковое представление моего массива 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

set '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).

Смежные вопросы