numpy savetxt formatted as integer is not saving zeroes

Question:

I am trying to save numpy.array to .csv in the following way.

with open("resultTR.csv", "wb") as f:
    f.write(b'ImageId,Labeln')
    numpy.savetxt(f, result, fmt='%i', delimiter=",")

result is numpy.array that consists of two columns, first column are indices (numbers 1 through n) and second column values from (0,9).

Unfortunately I have problem that whenever there is 0 in the second column then nothing is written to the resulting .csv file in the second column.

In other words first five rows of array looks like this:

[[  1.00000000e+00   2.00000000e+00]
 [  2.00000000e+00   0.00000000e+00]
 [  3.00000000e+00   9.00000000e+00]
 [  4.00000000e+00   9.00000000e+00]
 [  5.00000000e+00   3.00000000e+00]

And first five rows of .csv file like this:

ImageId,Label
1,2
2
3,9
4,9
5,3

It looks to me like my code should work and thus not saving zeroes seems to me very weird. Does anyone have some idea what can possibly be wrong with my code for writing to .csv file?

EDIT:

Just for compleetnes my python version is 2.7.2 and it’s running on Mac OS X 10.9.2

Asked By: ziky90

||

Answers:

I would try saving the array as an int array, as in result.astype(int), or in full:

with open("resultTR.csv", "wb") as f:
    f.write(b'ImageId,Labeln')
    numpy.savetxt(f, result.astype(int), fmt='%i', delimiter=",")
Answered By: askewchan

Also had the same problem in a script using numpy.savetxt, but i could not use result.astype(int) as I had floats in another column.

Solved it using %5.0f for the format of the output of the zeros.

Answered By: Guto

A cleaner solution is using the argument fmt='%s'.

with open("resultTR.csv", "wb") as f:
   f.write(b'ImageId,Labeln')
   numpy.savetxt(f, result, fmt='%s', delimiter=",")
Answered By: Florian Dubost
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.