43

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

with open("resultTR.csv", "wb") as f:
    f.write(b'ImageId,Label\n')
    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

Cœur
  • 37,241
  • 25
  • 195
  • 267
ziky90
  • 2,627
  • 4
  • 33
  • 47

3 Answers3

55

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,Label\n')
    numpy.savetxt(f, result.astype(int), fmt='%i', delimiter=",")
askewchan
  • 45,161
  • 17
  • 118
  • 134
5

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

with open("resultTR.csv", "wb") as f:
   f.write(b'ImageId,Label\n')
   numpy.savetxt(f, result, fmt='%s', delimiter=",")
0

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.

Guto
  • 541
  • 5
  • 14