Frage

Ich versuche CSV mit der folgenden Zeile zu lesen:

raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)

OK, diese Funktion liest diese Datei in das Datensatzarray, wenn sie auf Zeichenfolgendaten in der Datendatei trifft.soweit ich weiß, sollte die Datei auch in das Datensatzarray eingelesen werden, wenn dtype None ist.Ist das richtig?

Wenn jedoch keine Zeichenfolgendaten vorhanden sind und nur numerische Daten angezeigt werden, liest diese Funktion Daten in ndarray .

Wenn nein, gibt es eine bequeme Möglichkeit, das Lesen dieser Funktion als Datensatzarray zu erzwingen?

Das Problem mit ndarray ist, dass mein gesamter Code erstellt wurde, um Datensatzarrays zu verarbeiten.

UPD1 Nur für den Fall, dass jemand es versucht, hier ist eine kurze Lösung.Möglicherweise ist dieser nicht der beste, aber zumindest funktioniert er:

Datei aus CSV als ndarray lesen raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)

Standardnamen und Datentypen für Spalten generieren:

names_=['f'+str(i) for i in range(raw_data.shape[1])];
names=[(name,raw_data.dtype) for name in names_];

Und schließlich, um ein Datensatzarray zu erstellen:

raw_data_as_ra = raw_data.ravel().view(names);
War es hilfreich?

Lösung

Sie könnten verwenden recfromcsv, das ist abgeleitet von genfromtxt, stattdessen:

Wenn Ihre Datei so aussieht:

col1,col2,col3
1.1, 2.4, 3.2
4.1, 5.2, 6.3

Dann mach das

a = np.recfromcsv('yourfile.csv')

geben:

rec.array([(1.1, 2.4, 3.2), (4.1, 5.2, 6.3)], 
      dtype=[('col1', '<f8'), ('col2', '<f8'), ('col3', '<f8')])

Beachten Sie, dass recfromcsv verwendet die erste Zeile als Spalten- / Datensatznamen.

Sie können auch die gleichen Eingabeparameter wie verwenden genfromtxt (beispielsweise.der delimiter Parameter).Ihre Codezeile könnte so aussehen, wenn Ihre Datei tabulatorgetrennt ist:

np.recfromcsv(datafile,delimiter='\t'))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top