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.
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=",")
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)
.
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.
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())
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)
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))
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
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
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)
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 (,).
Ich glaube, Sie können dies auch ganz einfach wie folgt erreichen:
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