Is er een manier om een NumPy-array in een CSV-bestand te dumpen? Ik heb een 2D NumPy-array en moet deze in een voor mensen leesbaar formaat dumpen.
Antwoord 1, autoriteit 100%
numpy.savetxt
slaat een array op in een tekstbestand.
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
Antwoord 2, autoriteit 17%
Je kunt pandas
gebruiken. Er is wel wat extra geheugen voor nodig, dus het is niet altijd mogelijk, maar het is erg snel en gemakkelijk te gebruiken.
import pandas as pd
pd.DataFrame(np_array).to_csv("path/to/file.csv")
als je geen header of index wilt, gebruik dan to_csv("/path/to/file.csv", header=None, index=None)
Antwoord 3, autoriteit 5%
tofile
is een handige functie om dit te doen:
import numpy as np
a = np.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
a.tofile('foo.csv',sep=',',format='%10.5f')
De man-pagina bevat enkele nuttige opmerkingen:
Dit is een handige functie voor het snel opslaan van arraygegevens.
Informatie over endianness en precisie gaat verloren, dus deze methode niet
een goede keuze voor bestanden die bedoeld zijn om gegevens te archiveren of gegevens te transporteren
tussen machines met verschillende endianness. Sommige van deze problemen kunnen
worden overwonnen door de gegevens als tekstbestanden uit te voeren, ten koste van
snelheid en bestandsgrootte.
Notitie. Deze functie produceert geen multi-line CSV-bestanden, het bespaart alles op één regel.
Antwoord 4, Autoriteit 2%
Recordarrays schrijven als CSV-bestanden met headers vereist een beetje meer werk.
Dit voorbeeld leest in een CSV-bestand (example.csv
) en schrijft de inhoud van een ander CSV-bestand (out.csv
).
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', encoding='ascii')
print(repr(ar))
# rec.array([(1, 100.1, 'string1'), (2, 222.2, 'second string')],
# dtype=[('col1', '<i8'), ('col2', '<f8'), ('col3', '<U13')])
# 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', ',')
Merk op dat het bovenstaande voorbeeld de waarden niet aankan die snaren met komma’s zijn. Om altijd niet-numerieke waarden binnen quotes in te voegen, gebruikt u de csv
Ingebouwde module:
import csv
with open('out2.csv', 'w', newline='') as fp:
writer = csv.writer(fp, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(ar.dtype.names)
writer.writerows(ar.tolist())
Antwoord 5, Autoriteit 2%
Zoals reeds besproken, is de beste manier om de array in een CSV-bestand te dumpen, met behulp van .savetxt(...)
methode. Er zijn echter bepaalde dingen die we moeten weten om het goed te doen.
Als u bijvoorbeeld een numpy array hebt met dtype = np.int32
als
narr = np.array([[1,2],
[3,4],
[5,6]], dtype=np.int32)
en wil opslaan met savetxt
als
np.savetxt('values.csv', narr, delimiter=",")
Het slaat de gegevens op in een exponentieel formaat met drijvende komma als
1.000000000000000000e+00,2.000000000000000000e+00
3.000000000000000000e+00,4.000000000000000000e+00
5.000000000000000000e+00,6.000000000000000000e+00
U moet de opmaak wijzigen door een parameter met de naam fmt
as
te gebruiken
np.savetxt('values.csv', narr, fmt="%d", delimiter=",")
om gegevens in de oorspronkelijke indeling op te slaan
Gegevens opslaan in gecomprimeerde gz-indeling
Ook savetxt
kan worden gebruikt voor het opslaan van gegevens in .gz
gecomprimeerde indeling, wat handig kan zijn bij het overbrengen van gegevens via het netwerk.
We hoeven alleen de extensie van het bestand te wijzigen als .gz
en numpy regelt alles automatisch
np.savetxt('values.gz', narr, fmt="%d", delimiter=",")
Hopelijk helpt het
Antwoord 6
Ik geloof dat je dit ook heel eenvoudig als volgt kunt bereiken:
- Converteer Numpy-array naar een Pandas-dataframe
- Opslaan als CSV
bijv. #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
bijv. #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
Antwoord 7
als je in een kolom wilt schrijven:
for x in np.nditer(a.T, order='C'):
file.write(str(x))
file.write("\n")
Hier is ‘a’ de naam van numpy array en ‘file’ is de variabele die in een bestand moet worden geschreven.
Als je in een rij wilt schrijven:
writer= csv.writer(file, delimiter=',')
for x in np.nditer(a.T, order='C'):
row.append(str(x))
writer.writerow(row)
Antwoord 8
In Python gebruiken we de csv.writer()-module om gegevens naar csv-bestanden te schrijven. Deze module is vergelijkbaar met de csv.reader() module.
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()
Een scheidingsteken is een tekenreeks die wordt gebruikt om velden te scheiden. De standaardwaarde is komma(,).
Antwoord 9
Als u uw numpy-array (bijv. your_array = np.array([[1,2],[3,4]])
) in één cel wilt opslaan, kunt u deze eerst converteren met your_array.tolist()
.
Sla het dan op de normale manier op in één cel, met delimiter=';'
en de cel in het csv-bestand ziet er zo uit [[1, 2], [2, 4]]
Dan zou je je array als volgt kunnen herstellen:
your_array = np.array(ast.literal_eval(cell_string))
Antwoord 10
Je kunt het ook doen met pure python zonder modules te gebruiken.
# 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)
Antwoord 11
voor het opslaan van NumPy-array naar tekstbestand importeer eerst de opgeslagen tekst uit de Numpy-module
beschouw de naam van uw Numpy-array als train_df:
from numpy import savetxt
np.savetxt('train_df.txt', train_df, fmt='%s')