Angesichts dieser CSV-Datei:
"A","B","C","D","E","F","timestamp"
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12
Ich möchte es einfach als Matrix / ndarray mit 3 Zeilen und 7 Spalten laden. Aus irgendeinem Grund ist alles, was ich aus numpy herausholen kann, ein ndarray mit 3 Zeilen (eine pro Zeile) und ohne Spalten.
r = np.genfromtxt(fname,delimiter=',',dtype=None, names=True)
print r
print r.shape
[ (611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291111964948.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291113113366.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291120650486.0)]
(3,)
Ich kann es manuell iterieren und in die gewünschte Form hacken, aber das scheint albern. Ich möchte es nur als richtige Matrix laden, damit ich es über verschiedene Dimensionen schneiden und zeichnen kann, genau wie in Matlab.
open
lokal für diese einzelne Zeile? Wird die Datei wie in am Ende der Zeile geschlossen?loadtxt
langsam ist. Alternativpandas
ist ziemlich gut für den ZweckIch denke, die Verwendung
dtype
einer Namenszeile verwirrt die Routine. Versuchen>>> r = np.genfromtxt(fname, delimiter=',', names=True) >>> r array([[ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29111196e+12], [ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29111311e+12], [ 6.11882430e+02, 9.08956010e+03, 5.13300000e+03, 8.64075140e+02, 1.71537476e+03, 7.65227770e+02, 1.29112065e+12]]) >>> r[:,0] # Slice 0'th column array([ 611.88243, 611.88243, 611.88243])
quelle
Sie können eine CSV-Datei mit Headern in ein strukturiertes NumPy-Array mit np.genfromtxt einlesen . Zum Beispiel:
import numpy as np csv_fname = 'file.csv' with open(csv_fname, 'w') as fp: fp.write("""\ "A","B","C","D","E","F","timestamp" 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12 611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12 """) # Read the CSV file into a Numpy record array r = np.genfromtxt(csv_fname, delimiter=',', names=True, case_sensitive=True) print(repr(r))
das sieht so aus:
array([(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111196e+12), (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111311e+12), (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29112065e+12)], dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8'), ('D', '<f8'), ('E', '<f8'), ('F', '<f8'), ('timestamp', '<f8')])
Sie können auf eine benannte Spalte wie folgt zugreifen
r['E']
:array([1715.37476, 1715.37476, 1715.37476])
Hinweis: In dieser Antwort wurde zuvor np.recfromcsv verwendet , um die Daten in ein NumPy-Datensatzarray einzulesen . Obwohl an dieser Methode nichts auszusetzen war, sind strukturierte Arrays aus Gründen der Geschwindigkeit und Kompatibilität im Allgemeinen besser als Record-Arrays.
quelle