Antworten:
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=",")
numpy.array
Zeichenfolgen aus. Könnten Sie eine Methode zum Speichern als CSV für ein numpy.array
Objekt mit Zeichenfolgen vorschreiben ?
fmt='%s'
Sie können verwenden pandas
. Es braucht etwas zusätzlichen Speicher, so dass es nicht immer möglich ist, 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 möchten, verwenden Sie to_csv("/path/to/file.csv", header=None, index=None)
df.to_csv("file_path.csv", header=None)
header=None, index=None
entfernen Kopfzeile und Indexspalte.
comments
Schlüsselwortargument auf setzen ''
, das #
wird unterdrückt.
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 praktische Funktion zum schnellen Speichern von Array-Daten. Informationen zu Endianness und Präzision gehen verloren, daher ist diese Methode keine gute Wahl für Dateien, die Daten archivieren oder Daten zwischen Maschinen mit unterschiedlicher Endianness transportieren sollen. Einige dieser Probleme können überwunden werden, indem die Daten auf Kosten der Geschwindigkeit und der Dateigröße als Textdateien ausgegeben werden.
Hinweis. Diese Funktion erzeugt keine mehrzeiligen CSV-Dateien, sondern speichert alles in einer Zeile.
Das Schreiben von Datensatz-Arrays als CSV-Dateien mit Headern erfordert etwas mehr Arbeit.
In diesem Beispiel wird eine CSV-Datei mit dem Header in der ersten Zeile gelesen und anschließend 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 in diesem Beispiel keine Zeichenfolgen mit Kommas berücksichtigt werden. Verwenden Sie das csv
Paket , um Anführungszeichen 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())
Wie bereits erläutert, können Sie das Array am besten mithilfe einer .savetxt(...)
Methode in eine CSV-Datei sichern. Es gibt jedoch bestimmte Dinge, die wir wissen sollten, um es richtig zu machen.
Zum Beispiel, wenn Sie 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
als speichern
np.savetxt('values.csv', narr, delimiter=",")
Die Daten werden im Gleitkomma-Exponentialformat 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
als
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
um Daten im Originalformat zu speichern
Auch savetxt
kann zum Speichern von Daten in verwendetem .gz
komprimiertem Format , das während nützlich sein könnte Daten über das Netzwerk übertragen werden .
Wir müssen nur die Erweiterung der Datei ändern, da .gz
numpy sich automatisch um alles kümmert
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Ich hoffe es hilft
fmt="%d"
war was ich suchte. Vielen Dank!
Ich glaube, Sie können dies auch ganz einfach wie folgt erreichen:
zB # 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
zB # 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
Wenn Sie in eine Spalte schreiben möchten:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Hier ist 'a' der Name des Numpy-Arrays und 'file' ist die Variable, die in eine Datei geschrieben werden soll.
Wenn Sie in Reihe schreiben möchten:
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 konvertieren your_array.tolist()
.
Speichern Sie es delimiter=';'
dann wie gewohnt in einer Zelle mit, und die Zelle in der CSV-Datei sieht folgendermaßen aus[[1, 2], [2, 4]]
Dann könnten Sie Ihr Array folgendermaßen wiederherstellen:
your_array = np.array(ast.literal_eval(cell_string))
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, mit der Felder getrennt werden. Der Standardwert ist Komma (,).