2017-05-11 3 views
1

Ich habe versucht, den Dataframe durch Funktion durch Schleifen durch Zeilen und den geänderten Datenrahmen zu ändern. Im folgenden Code übergebe ich einen Datenrahmen 'ding' an die Funktion 'test' und erstelle eine neue Spalte 'C', indem ich durch jede Zeile iteriere und den modifizierten Datenrahmen zurückgebe. Ich erwartete, dass das test_ding df 3 Spalten hat, aber nur zwei Spalten sehen konnte. Jede Hilfe wird sehr geschätzt.Ändern des Datenrahmens durch Schleifen durch jede Zeile in Funktion

P.S. Es könnte auch andere einfachere Methoden hat diese kleine Aufgabe zu erreichen, aber ich bin auf der Suche über Zeilen zu durchlaufen und möchte die Änderungen an dem Datenrahmen durchgeführt, um sehen außerhalb der Funktion

s1 = pd.Series([1,3,5,6,8,10,1,1,1,1,1,1]) 
s2 = pd.Series([4,5,6,8,10,1,7,1,6,5,4,3]) 

ding=pd.DataFrame({'A':s1,'B':s2}) 

def test(ding): 
    for index,row in ding.iterrows(): 
     row['C']=row.A+row.B 
return ding 

test_ding=test(ding) 

Antwort

2

Sie set_value auf verwenden können reflektiert werden der ursprüngliche Datenrahmen statt auf row. set_value ist pretty fast wenn Sie wollen Werte Zelle für Zelle setzen:

def test(ding): 
    for index, row in ding.iterrows(): 
     ding.set_value(index, 'C', row.A+row.B) 
    return ding 
​ 
test_ding=test(ding) 

test_ding 
# A B C 
#0 1 4 5.0 
#1 3 5 8.0 
#2 5 6 11.0 
# ... 
+1

ich auch itertuple unterschiedlichen dtypes zu erhalten empfehlen würde. Ich kann jetzt nicht sagen, aber ich denke, es ist schneller – piRSquared

+0

Gibt es einen bestimmten Grund, warum können wir nicht auf die Art und Weise zuweisen, die ich gepostet habe? 'row ['C'] = row.A + row.B' –

+0

Da' itrowers' eine Kopie zurückgibt, keine View, also einen Wert der Zeile zuweisen, hat keinen Einfluss auf den ursprünglichen Datenrahmen. Dies ist das Dokument * Sie sollten ** nie ändern ** etwas, über das Sie iterieren. Dies funktioniert nicht in allen Fällen. Abhängig von den Datentypen gibt der Iterator eine Kopie und keine Ansicht zurück, und das Schreiben von daran hat keine Auswirkungen. * – Psidom

Verwandte Themen