web-dev-qa-db-fra.com

Enregistrer plusieurs tableaux dans un fichier csv avec des noms de colonne

Aussi simple que cela puisse paraître, je n'ai trouvé aucune solution à ma question en ligne. Fondamentalement, j'ai deux tableaux a et b que je veux enregistrer dans un fichier csv. Ce sera deux colonnes. Je veux également ajouter les noms des colonnes. Ci-dessous le code que j'utilise pour vider les tableaux vers un csv.

from np import array, savetxt

a = array([1,2,3,4])
b = array([5,6,7,8])
savetxt('submission2.csv', Zip(a,b), delimiter=',', fmt='%f')

Comment ajouter des noms de colonne? J'aimerais que le fichier csv ressemble à

Name1 Name2
 1     5
 2     6
 3     7
 4     8

Il est si étrange que cette option ne soit pas dans la fonction savetxt. L'option header le fait car elle ne fait que coller un commentaire dans la première cellule. Merci.

Modifier: tableaux

12
Koba

Utilisez l'option header, comme ceci:

>>> import numpy
>>> a = numpy.array([[1,2],[3,4],[5,6]])
>>> numpy.savetxt("foo.csv", a, delimiter=',', header="A,B", comments="")

Le fichier résultant ressemble à ceci:

A,B
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
12
Burhan Khalid

Vous pouvez le faire avec pandas package facilement:

import pandas as pd
import numpy as np

a = np.array([1,2,3,4])
b = np.array([5,6,7,8])

df = pd.DataFrame({"name1" : a, "name2" : b})
df.to_csv("submission2.csv", index=False)
16
Anton Protopopov

Notez que savetxt (et loadtxt) accepte également les descripteurs de fichiers.

Par conséquent, si vous voulez un en-tête plus avancé, vous pouvez le faire:

a = array([1,2,3,4])
b = array([5,6,7,8])
with open('submission2.csv','w') as f:
    f.write('# This is a very complex header\n')
    f.write('A,B\n')
    savetxt(f, Zip(a,b), delimiter=',', fmt='%f')

Ou, comme cela a déjà été noté, utilisez l'argument header=str(...).

2
zeroth

vous pouvez faire comme ça:

import np import array, savetxt

a = array([1,2,3,4])
b = array([5,6,7,8])
f = open("submission2.csv", "w")
f.write("{},{}\n".format("Name1", "Name2"))
for x in Zip(a, b):
    f.write("{},{}\n".format(x[0], x[1]))
f.close()
1
Hackaholic

J'ai trouvé une solution pour enregistrer plusieurs tableaux numpy 1D sous forme de colonnes:

 import numpy as np
 data = []
 for i in single_np_arrays:
     data.append(i)
 data = np.array(data).T  #transpose the array to have proper columns
 np.savetxt('columns_from_np_arrays.csv',data,delimiter=',')
0
Dawid