web-dev-qa-db-fra.com

le format numpy savetxt en tant que nombre entier ne sauvegarde pas les zéros

J'essaie de sauvegarder numpy.array au format .csv de la manière suivante.

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

result est numpy.array qui est composé de deux colonnes, la première colonne contient les index (nombres 1 à n) et les valeurs de la deuxième colonne à partir de (0,9).

Malheureusement, le problème est que chaque fois qu'il y a 0 dans la deuxième colonne, rien n'est écrit dans le fichier .csv résultant dans la deuxième colonne.

En d'autres termes, les cinq premières lignes du tableau ressemblent à ceci:

[[  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]

Et les cinq premières lignes du fichier .csv comme ceci:

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

Il me semble que mon code devrait fonctionner et que, par conséquent, ne pas économiser les zéros me semble très étrange. Quelqu'un at-il une idée de ce qui peut éventuellement être faux avec mon code pour écrire dans un fichier .csv?

MODIFIER:

Juste pour compléter ma version de python est 2.7.2 et fonctionne sous Mac OS X 10.9.2 

21
ziky90

Je voudrais essayer de sauvegarder le tableau en tant que tableau int, comme dans result.astype(int), ou dans son intégralité:

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

Également eu le même problème dans un script utilisant numpy.savetxt, mais je ne pouvais pas utiliser result.astype(int) car j'avais des éléments flottants dans une autre colonne.

Résolu en utilisant %5.0f pour le format de la sortie des zéros. 

0
Guto