it-swarm.com.de

Speichern Sie ein NumPy-Array in eine CSV-Datei

Gibt es eine Möglichkeit, ein NumPy-Array in eine CSV-Datei zu kopieren? Ich habe ein 2D-NumPy-Array und muss es in einem für Menschen lesbaren Format sichern.

385
Dexter

numpy.savetxt speichert ein Array in einer Textdatei.

import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
627
Jim Brissom

Sie können pandas verwenden. Es ist etwas Speicherplatz erforderlich, daher ist dies nicht immer möglich, aber es ist sehr schnell und einfach zu bedienen.

import pandas as pd 
pd.DataFrame(np_array).to_csv("path/to/file.csv")

wenn Sie keinen Header oder Index wünschen, verwenden Sie to_csv("/path/to/file.csv", header=None, index=None).

81
maxbellec

tofile ist eine bequeme Funktion, um dies zu tun:

import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')

Die Manpage enthält einige nützliche Hinweise:

Dies ist eine bequeme Funktion zum schnellen Speichern von Array-Daten. Informationen über Endianness und Präzision gehen verloren, daher ist diese Methode nicht eine gute Wahl für Dateien, die zum Archivieren von Daten oder zum Transportieren von Daten gedacht sind zwischen Maschinen mit unterschiedlicher Endianness. Einige dieser Probleme können durch Ausgabe der Daten als Textdateien auf Kosten von .__ überwunden werden. Geschwindigkeit und Dateigröße.

Hinweis. Diese Funktion erzeugt keine mehrzeiligen CSV-Dateien, sondern speichert alles in einer Zeile.

33
atomh33ls

Das Schreiben von Datensatz-Arrays als CSV-Dateien mit Kopfzeilen erfordert etwas mehr Arbeit.

In diesem Beispiel wird eine CSV-Datei mit dem Header in der ersten Zeile gelesen und dann dieselbe Datei geschrieben.

import numpy as np

# Write an example CSV file with headers on first line
with open('example.csv', 'w') as fp:
    fp.write('''\
col1,col2,col3
1,100.1,string1
2,222.2,second string
''')

# Read it as a Numpy record array
ar = np.recfromcsv('example.csv')
print(repr(ar))
# rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')], 
#           dtype=[('col1', '<i4'), ('col2', '<f8'), ('col3', 'S13')])

# Write as a CSV file with headers on first line
with open('out.csv', 'w') as fp:
    fp.write(','.join(ar.dtype.names) + '\n')
    np.savetxt(fp, ar, '%s', ',')

Beachten Sie, dass dieses Beispiel keine Zeichenfolgen mit Kommas berücksichtigt. Verwenden Sie das Paket csv , um Angebote für nicht numerische Daten zu berücksichtigen:

import csv

with open('out2.csv', 'wb') as fp:
    writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
    writer.writerow(ar.dtype.names)
    writer.writerows(ar.tolist())
11
Mike T

wenn Sie in die Spalte schreiben wollen:

    for x in np.nditer(a.T, order='C'): 
            file.write(str(x))
            file.write("\n")

Hier ist 'a' der Name von numpy array und 'file' ist die Variable, die in eine Datei geschrieben werden soll.

Wenn du in Reihe schreiben willst:

    writer= csv.writer(file, delimiter=',')
    for x in np.nditer(a.T, order='C'): 
            row.append(str(x))
    writer.writerow(row)
4
Rimjhim Bhagat

Wenn Sie Ihr numpy-Array (z. B. your_array = np.array([[1,2],[3,4]])) in einer Zelle speichern möchten, können Sie es zuerst mit your_array.tolist() konvertieren.

Dann speichern Sie es wie üblich in einer Zelle mit delimiter=';' Und die Zelle in der csv-Datei sieht so aus [[1, 2], [2, 4]]

Dann könnten Sie Ihr Array folgendermaßen wiederherstellen: your_array = np.array(ast.literal_eval(cell_string))

2
Mr Poin

Wie bereits erwähnt, ist der beste Weg, das Array in eine CSV-Datei zu sichern, die Verwendung von .savetxt(...)method. Es gibt jedoch einige Dinge, die wir wissen sollten, um es richtig zu machen. 

Wenn Sie beispielsweise ein numpy-Array mit dtype = np.int32 as haben

   narr = np.array([[1,2],
                 [3,4],
                 [5,6]], dtype=np.int32)

und möchten mit savetxt as speichern

np.savetxt('values.csv', narr, delimiter=",")

Die Daten werden im exponentiellen Gleitkomma-Format als gespeichert

1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00

Sie müssen die Formatierung ändern, indem Sie einen Parameter namens fmt as verwenden

np.savetxt('values.csv', narr, fmt="%d", delimiter=",")

um die Daten in ihrem ursprünglichen Format zu speichern

Speichern von Daten im komprimierten gz-Format

savetxt kann auch zum Speichern von Daten im .gz-komprimierten Format verwendet werden, was beim Übertragen von Daten über das Netzwerk hilfreich sein kann. 

Wir müssen nur die Dateierweiterung ändern, da .gz und numpy alles automatisch erledigt

np.savetxt('values.gz', narr, fmt="%d", delimiter=",")

Ich hoffe es hilft

2
Daksh

Sie können dies auch mit reinem Python tun, ohne Module zu verwenden.

# format as a block of csv text to do whatever you want
csv_rows = ["{},{}".format(i, j) for i, j in array]
csv_text = "\n".join(csv_rows)

# write it to a file
with open('file.csv', 'w') as f:
    f.write(csv_text)
2
Greg

In Python verwenden wir das Modul csv.writer (), um Daten in csv-Dateien zu schreiben. Dieses Modul ähnelt dem Modul csv.reader ().

import csv

person = [['SN', 'Person', 'DOB'],
['1', 'John', '18/1/1997'],
['2', 'Marie','19/2/1998'],
['3', 'Simon','20/3/1999'],
['4', 'Erik', '21/4/2000'],
['5', 'Ana', '22/5/2001']]

csv.register_dialect('myDialect',
delimiter = '|',
quoting=csv.QUOTE_NONE,
skipinitialspace=True)

with open('dob.csv', 'w') as f:
    writer = csv.writer(f, dialect='myDialect')
    for row in person:
       writer.writerow(row)

f.close()

Ein Trennzeichen ist eine Zeichenfolge, die zum Trennen von Feldern verwendet wird. Der Standardwert ist Komma (,).

0
Tamil Selvan S

Ich glaube, Sie können dies auch ganz einfach wie folgt erreichen:

  1. Konvertieren Sie ein Numpy-Array in ein Pandas-Datenfeld
  2. Speichern Sie als CSV

z.B. # 1:

    # Libraries to import
    import pandas as pd
    import nump as np

    #N x N numpy array (dimensions dont matter)
    corr_mat    #your numpy array
    my_df = pd.DataFrame(corr_mat)  #converting it to a pandas dataframe

z.B. # 2:

    #save as csv 
    my_df.to_csv('foo.csv', index=False)   # "foo" is the name you want to give
                                           # to csv file. Make sure to add ".csv"
                                           # after whatever name like in the code
0
DrDEE