2017-07-05 2 views
0

Ich versuche, Daten aus einer CSV-Datei zu lesen. Es gibt 7 Spalten. Die Spalte 5 ist ein String-Typ, während der Rest der Spalten Floats sind.Lesen float sowie Zeichenfolge im richtigen Format

Wenn ich folgenden Befehl nur zum Lesen der Float-Daten geben, ist die Ausgabe im richtigen Format.

data = np.loadtxt('data.csv', delimiter=',', usecols= (0,1,2,3,4,6)) 
print "\ndata=\n",data 

Ausgang ist

data= 
[[ 3.00000000e+00 9.46000000e+01 1.80180000e+02 3.28900000e+01 
    6.80685824e+00 3.70000000e-01] 
..., 
[ 3.00000000e+00 1.33200000e+02 2.51460000e+02 2.01600000e+01 
    5.77236048e+00 -2.70000000e-01]] 

mit Form (500L, 6L)

Aber dann, wenn ich versuche 5 alle Spalten einschließlich der Spaltennummer zu lesen, die String-Typ ist verwende ich folgende Code:

datastr = np.loadtxt('data.csv', delimiter=',',dtype={'names': ('c1','c2','c3','c4','c5','c6','c7'), 
                      'formats':('f4','f4','f4','f4','f4','S10','f4')}) 
print "\ndatastr=\n",datastr 

Jetzt ist die Ausgabe

datastr= 
[ (3., 94.59999847, 180.17999268, 32.88999939, 6.80685806, 'Large', 0.37  ) ... (3., 133.19999695, 251.46000671, 20.15999985, 5.77236032, 'Small', -0.27000001)] 

mit einer Form (500L,)

Aber ich brauche diese datastr Form (500L, 7L) zu erhalten wie in dem alle schweben Beispiel hatte ich Form (500L, 6L)

Wie mache ich das?

Dank

+0

Schauen Sie sich den 'dtype' dieses' datastr' an. Sie haben ein 1d strukturiertes Array mit 7 Feldern erstellt. Nur so können Sie eine Mischung aus Float- und String-Spalten halten. Sie greifen auf Felder mit dem Namen 'datastr ['c3']' 'zu. Wenn Ihnen dieser Mix nicht gefällt, sollten Sie die Datei zweimal laden, um die 6 Float-Spalten zu erhalten, und einmal, um die Zeichenfolge zu erhalten. Sie erhalten die gleichen Daten, aber in 2 Arrays. – hpaulj

+0

Danke. Ich möchte die Daten im Adaboost-Klassifikator verwenden. Für die cross_val_score muss ich Eingabe-Dataset angeben. Wenn alle Daten in einer Datenstruktur sind, gebe ich einfach 'clf = AdaBoostClassifier (n_estimators = 100) scores = cross_val_score (clf, Daten, target_final) c = scores.mean()'. Aber mit zwei Datensätzen, wie liefere ich es an cross_val_score. Wie du sehen kannst, bin ich Neuling. – Confused

+0

Welche Art von Array kann der Klassifikator verwenden? Kann es ein strukturiertes Array sein, oder muss es ein 2D-Array mit einem einheitlichen dtype sein (z. B. alle Floats)? Wie geht es mit einer Mischung aus String und Floats? – hpaulj

Antwort

0

Die Elemente in datastr ist <type 'numpy.void'>, Sie einige Informationen über sie an here finden.

Verwandte Themen