csv-datei in numpy-array mit unterschiedlichen datentypen pro spalte

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kussji
User
Beiträge: 78
Registriert: Mittwoch 16. Mai 2018, 09:58

Hallo
Ich packe eine CSV-Datei in ein numpy-array.

Der folgende Code macht dabei alles float.
Gibt es die Möglichkeit die ersten beiden csv-Werte als int32 und der letzte Wert float32? :roll:

data.csv
256945 1365856 1595.23
267894 1348952 1689.14

Code: Alles auswählen

with open(data.csv,'r') as dest_f:
    data_iter = csv.reader(dest_f, delimiter = ' ')
    data = [data for data in data_iter]

dt = np.dtype(np.float32)
data_array = np.asarray(data, dtype = dt)
Benutzeravatar
__blackjack__
User
Beiträge: 13121
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@kussji: Warum benutzt Du nicht `numpy` zum Einlesen der CSV-Datei? Da suchst Du `recfromtxt()`.

Die „list comprehension“ macht ja nicht wirklich etwas, das wäre einfacher ``data = list(data_iter)`` oder ohne den Namen für das Zwischenergebnis: ``data = list(csv.reader(dest_f, delimiter=" "))``.

Was ist denn der Gedanke hinter dem Namen `dest_f`? Das scheint mir falsch zu sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
kussji
User
Beiträge: 78
Registriert: Mittwoch 16. Mai 2018, 09:58

Hallo Danke für die Antwort.

Funktion kannte ich nicht - Danke. Wenn ich ehrlich bin, obiger Code ist aus dem Netz kopiert. Name "dest_f" hat mich auch etwas verwundert.

Also probiere ich es so:

Code: Alles auswählen

data = np.genfromtxt(fileName, dtype=[('s1','i4'),('s2','i4'),('s3','f4')], delimiter=" ")
Wäre zwar das was ich suche - nur: Meine Datei die ich einlese hat über 10Mio. Zeilen.mit der Funktion "genfromtxt()" dauert das einlesen ca. 4 Minuten.
Mit meinem erst geposteten Code dauert es nur etwa 30 Sekunden - aber eben, nicht das richtige Format. Darum bin ich noch nicht glücklich :roll:

Jemand eine gute Idee?
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann lies halt erst alles als floats und wandle das danach um.
Antworten