Ich habe dieses Problem seit ein paar Tagen und versuchte ein paar verschiedene Ansätze, aber ich kann nicht scheinen, es richtig zu machen. Dies ist die eine vereinfachte Version meiner CSV-Datei: testme.csvVersuchen, Teil von CSV zu numpy Array zu extrahieren
"Name", "City", "State", "1996-04", "1996-05", "1996-06", "1996-07"
"Bob", "Portland", "OR", 100000, 120000, 140000, 160000
"Sally", "Eugene", "OR", 50000, 75000, 80000, 90000
"Peter", "San Francisco", "CA", , , 440000, 500000
ich die Zahlen als 2D-Array zu extrahieren, die ich möchte auf einige Mathematik zu tun. Allerdings habe ich diese Textfelder davor, die ich ignorieren muss. Außerdem haben einige Zeilen keine Zahlen für alle Spalten, aber sobald die Zahlen beginnen, sind sie kontinuierlich nach rechts (d. H. Einige Zeilen haben leere Elemente für die ersten mehreren Spalten), und dies kann für jede Zeile unterschiedlich sein. Darüber hinaus ist dies die eigentliche Datensatz Hunderte von Zeilen und Dutzende von Spalten
hat einige von dem, was ich versucht habe:
import csv
import numpy as np
filename = "testme.csv"
ifile = open(filename, 'r')
header1 = ifile.readline()
reader = csv.reader(ifile)
A = np.array([]).reshape(0, 4)
for row in reader:
print row
print row[3:]
A = np.vstack([A, row[3:]])
print A
Und dann bekomme ich diese:
['Bob', ' "Portland"', ' "OR"', ' 100000', ' 120000', ' 140000', ' 160000']
[' 100000', ' 120000', ' 140000', ' 160000']
['Sally', ' "Eugene"', ' "OR"', ' 50000', ' 75000', ' 80000', ' 90000']
[' 50000', ' 75000', ' 80000', ' 90000']
['Peter', ' "San Francisco"', ' "CA"', ' ', ' ', ' 440000', ' 500000']
[' ', ' ', ' 440000', ' 500000']
[[' 100000' ' 120000' ' 140000' ' 160000']
[' 50000' ' 75000' ' 80000' ' 90000']
[' ' ' ' ' 440000' ' 500000']]
I‘ m nah, aber die Elemente sind jetzt alle wörtliche Zeichenfolgen. Gibt es einen einfacheren Weg dies zu tun und stattdessen Zahlen zu bekommen oder kann ich das durchgehen und jedes Element in Zahlen umwandeln? Und die leeren Elemente könnte ich davon profitieren, sie auf Null zu klemmen.
Vielen Dank für Rat und Hilfe im Voraus!
Aaron
Update (8/1/16) ich mit der genfromtxt Methode ging als das angepasst, was ich viel benötigt. Hier ist das Ergebnis für die Nachwelt und anderen
import csv
import numpy as np
NumIgnoreFirstCols = 3
filename = "testme2.csv"
ifile = open(filename, 'r')
reader = csv.reader(ifile)
header1 = next(reader)
numcols = len(header1)
#Find number of cols for usecol in genfromtxt
print("numcols", numcols)
ifile.close()
print(range(NumIgnoreFirstCols, numcols))
aMatrix = np.genfromtxt(filename, skip_header=1, delimiter=',', usecols=range(NumIgnoreFirstCols,numcols), dtype=int)
print aMatrix
normalizedMatrix = np.where(aMatrix<0, 0, aMatrix)
print(normalizedMatrix)
minValue = np.amin(normalizedMatrix)
maxValue = np.amax(normalizedMatrix)
print (minValue, maxValue)
Nochmals vielen Dank für all die Hilfe
Ich ging mit dieser Lösung, da sie das meiste von dem entsprach, was ich brauchte. Ich poste auch, was ich zuletzt benutzt habe –