Ich frage mich, ob es eine direkte Möglichkeit gibt, den Inhalt einer CSV-Datei in ein Datensatz-Array zu importieren, ähnlich wie die Familie read.table()
, read.delim()
und read.csv()
Daten in R's Datenrahmen importiert?
Oder ist es am besten, csv.reader() zu verwenden und dann etwas wie "numpy.core.records.fromrecords()" anzuwenden?
Sie können dazu Numpy's genfromtxt()
Methode verwenden, indem Sie das delimiter
kwarg auf ein Komma setzen.
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
Weitere Informationen zu dieser Funktion finden Sie in der entsprechenden Dokumentation.
Ich würde die Funktion read_csv
aus der Bibliothek pandas
empfehlen:
import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
Dies ergibt einen Pandas-DataFrame - und ermöglicht viele nützliche Funktionen zur Datenmanipulation, die mit Numpy-Datensatzarrays nicht direkt verfügbar sind.
DataFrame ist eine 2-dimensionale beschriftete Datenstruktur mit Spalten von
potentiell verschiedenen Typen. Sie können es sich wie eine Tabellenkalkulation oder SQL-Tabelle...
Ich würde auch genfromtxt
empfehlen. Da jedoch in der Frage nach einem record array gefragt wird, im Gegensatz zu einem normalen Array, muss der Parameter "dtype=None" zum Aufruf von "genfromtxt" hinzugefügt werden:
Gegeben eine Eingabedatei, myfile.csv
:
1.0, 2, 3
4, 5.5, 6
import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')
ergibt ein Array:
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
und
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
ergibt ein Datensatz-Array:
array([(1.0, 2.0, 3), (4.0, 5.5, 6)],
dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
Dies hat den Vorteil, dass Dateien mit mehreren Datentypen (einschließlich Strings) leicht importiert werden können.