Ich frage mich , ob es ein direkter Weg, um den Inhalt einer CSV - Datei in einen Rekord - Array, viel in der Art und Weise , dass R zu importieren read.table()
, read.delim()
und read.csv()
Familie importiert Daten in R - Datenrahmen?
Oder ist es der beste Weg, csv.reader () zu verwenden und dann so etwas anzuwenden numpy.core.records.fromrecords()
?
python
numpy
scipy
genfromtxt
hatmatrix
quelle
quelle
Antworten:
Sie können dazu die Numpy-
genfromtxt()
Methode verwenden, indem Sie dasdelimiter
kwarg auf ein Komma setzen.Weitere Informationen zur Funktion finden Sie in der jeweiligen Dokumentation .
quelle
nan
Werte, warum? Auch mit loadtxt bekomme ichUnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. Ich habe Umlaute wie ä und ö in den Eingabedaten.encoding="utf8"
Argument hinzuzufügen . Python ist eines der wenigen modernen Softwareteile, die häufig Probleme mit der Textcodierung verursachen, die sich wie Dinge aus der Vergangenheit anfühlen.Ich würde die
read_csv
Funktion aus derpandas
Bibliothek empfehlen :Dies ergibt einen Pandas DataFrame , der viele nützliche Datenmanipulationsfunktionen ermöglicht, die mit Numpy-Record-Arrays nicht direkt verfügbar sind .
Ich würde es auch empfehlen
genfromtxt
. Da die Frage jedoch nach einem Datensatzarray im Gegensatz zu einem normalen Array fragt , muss derdtype=None
Parameter demgenfromtxt
Aufruf hinzugefügt werden :Bei einer Eingabedatei
myfile.csv
:gibt ein Array:
und
gibt ein Datensatzarray an:
Dies hat den Vorteil, dass Dateien mit mehreren Datentypen (einschließlich Zeichenfolgen) problemlos importiert werden können .
quelle
(1000, 1)
.np.genfromtxt
macht das nicht: zB(1000,)
.Ich habe das zeitlich festgelegt
gegen
bei 4,6 Millionen Zeilen mit etwa 70 Spalten und stellte fest, dass der NumPy-Pfad 2 Minuten und 16 Sekunden und die Methode zum Verständnis der CSV-Liste 13 Sekunden dauerte.
Ich würde die CSV-Listen-Verständnismethode empfehlen, da sie höchstwahrscheinlich auf vorkompilierten Bibliotheken und nicht so sehr auf dem Interpreter wie NumPy basiert. Ich vermute, dass die Pandas-Methode einen ähnlichen Dolmetscheraufwand haben würde.
quelle
Sie können auch versuchen
recfromcsv()
, Datentypen zu erraten und ein ordnungsgemäß formatiertes Datensatzarray zurückzugeben.quelle
numpy.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
Die Hauptargumente sind die letzten drei.Da ich beide Möglichkeiten mit NumPy und Pandas ausprobiert habe, hat die Verwendung von Pandas viele Vorteile:
Dies ist mein Testcode:
test_numpy_csv.py
test_pandas.py
Datendatei:
Mit NumPy und Pandas in Versionen:
quelle
Mit diesem Code können Sie CSV-Dateidaten an ein Array senden:
quelle
Verwenden von
numpy.loadtxt
Eine ganz einfache Methode. Es erfordert jedoch, dass alle Elemente schweben (int und so weiter).
quelle
Dies ist der einfachste Weg:
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
Jetzt ist jeder Dateneintrag ein Datensatz, der als Array dargestellt wird. Sie haben also ein 2D-Array. Es hat mir so viel Zeit gespart.
quelle
Ich habe es versucht:
quelle
Ich würde vorschlagen, Tabellen (
pip3 install tables
) zu verwenden. Sie können Ihre.csv
Datei.h5
mit pandas (pip3 install pandas
) speichern.Sie können Ihre Daten dann einfach und mit weniger Zeit auch für große Datenmengen in ein NumPy-Array laden .
quelle
Diese Arbeit als Zauber ...
quelle