2017-10-23 3 views
2

Ich versuche, die Reihen innerhalb des gleichen Datenrahmens in Pandas zu tauschen.Zeilen im selben Pandas-Dataframe vertauschen

Ich habe laufen versucht

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B']) 
b, c = a.iloc[0], a.iloc[1] 
a.iloc[0], a.iloc[1] = c, b 

aber ich nur mit den beiden, die Werte für die zweite Reihe (3,4), die die Reihen enden.

Sogar die Variablen b und c sind jetzt beide 3 und 4 zugewiesen, obwohl ich sie nicht noch einmal zugewiesen habe. Mache ich etwas falsch?

Zac

Antwort

3

eine temporäre varaible den Wert speichern .copy() zu verwenden, da Sie die Werte verändern sich, während sie an der Kette zuweisen heißt, wenn Sie die Daten verwenden, kopiert direkt geändert werden.

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B']) 
b, c = a.iloc[0], a.iloc[1] 


temp = a.iloc[0].copy() 
a.iloc[0] = c 
a.iloc[1] = temp 

Oder Sie können direkt kopieren verwenden wie

a = pd.DataFrame(data = [[1,2],[3,4]], index=range(2), columns = ['A', 'B']) 
b, c = a.iloc[0].copy(), a.iloc[1].copy() 
a.iloc[0],a.iloc[1] = c,b 
+0

Oh ja, das das Problem gelöst. Danke vielmals! Ich bin mir immer noch nicht sicher, wann Werte in einer Kette sind. Würdest du sagen, dass es sicherer wäre, immer die Methode '.copy()' zu verwenden, wenn ich neue Variablen zuweise? – Zac

+0

Ja, standardmäßig enthalten sie den Verweis auf das Hauptobjekt. Alle Änderungen, die Sie vornehmen, spiegeln das Hauptobjekt wider. Du brauchst also kopieren. – Dark

+0

Akzeptieren Sie die Lösung, wenn es hilfreich war – Dark