2017-06-01 3 views
0

Ich habe einige große csv-Dateien, die ich importiert habe. Ich habe einige spezifische Spalten extrahiert, um eine neue Matrix nur mit diesen Spalten zu erstellen. Ich habe verkettet, um die Spalten nebeneinander zu platzieren. Jetzt möchte ich diese Matrix in zwei kleinere teilen, indem ich einige Zeilen daraus extrahiere. Ich weiß nicht, warum ich den Fehler immer wieder bekomme, wenn ich die Pop-Funktion für die verketteten Daten verwende.Pop nach Verkettung

data_set=[annual_inc, delinq_2yrs, dti, emp_length, loan_amnt, installment, int_rate, open_acc, total_acc, pub_rec, acc_now_delinq, loan_stat] 

result=pd.concat(data_set,axis=1) 

def splitDataSet(x, splitRatio): 
    trainSize = int(len(x)*splitRatio) 
    trainSet=[] 
    copy=x 
    while len(trainSet)<trainSize: 
     index=random.randrange(len(copy)) 
     trainSet.append(copy.pop(index)) 
    return[trainSet, copy] 

splitRatio=0.67 
train, test=splitDataSet(result, splitRatio) 
print(train) 

Wenn ich Pop auf DATA_SET verwenden, bevor es verketteten wurde es funktioniert, aber dann entfernt er die entsprechende Spalte und es ist nicht das, was ich suche. Zum Beispiel nach dem Befehl

result.pop(0) 

I erhalten, um den Fehler 'KeyError: 0' ich einfach Zeile entfernen möchte ‚0‘ aus dem Array result

PS: I weggelassen, um die Zeilen von Anfang an wie Importen und einig variable Vorverarbeitung. Wenn jemand es braucht, kann ich es einfügen.

+0

bearbeiten Sie bitte, fügen Sie die Ausgabe, die Sie erhalten, und die gewünschte Ausgabe hinzu – 16num

Antwort

1

copy=x kopiert nicht wirklich die Liste (x ist eine Liste, nicht wahr?), Aber copy auf die gleiche Liste wie x Punkt machen. Natürlich entspricht copy.pop()x.pop() was nicht das ist, was Sie wollen.

Um die Liste zu kopieren, tun Sie copy = x[:].

0

Ok. Ich denke, ich habe das verstanden. Zuerst musste ich Pandas-Array 'result' in list umwandeln. Um dies zu tun, habe ich verwendet:

a=result.values.tolist() 

dann von diesem Punkt a.pop() funktioniert gut.