Frage Warum sollte ich eine Kopie eines Datenrahmens in Pandas machen?


Als ich einen Subdatenrahmen von einem Elterndatenrahmen auswählte, bemerkte ich, dass einige Programmierer eine Kopie des Datenrahmens unter Verwendung der .copy() Methode.

Warum machen sie eine Kopie des Datenrahmens? Was passiert, wenn ich keine Kopie mache?


76
2017-12-28 02:22


Ursprung


Antworten:


Dies erweitert sich auf Pauls Antwort. In Pandas gibt die Indizierung eines Datenrahmens einen Verweis auf den ursprünglichen Datenrahmen zurück. Wenn Sie also die Teilmenge ändern, ändert sich der ursprüngliche DataFrame. Daher sollten Sie die Kopie verwenden, wenn Sie sicherstellen möchten, dass sich der ursprüngliche DataFrame nicht ändert. Betrachten Sie den folgenden Code:

df = DataFrame({'x': [1,2]})
df_sub = df[0:1]
df_sub.x = -1
print(df)

Du wirst kriegen:

x
0 -1
1  2

Im Gegensatz dazu bleibt df unverändert:

df_sub_copy = df[0:1].copy()
df_sub_copy.x = -1

86
2017-12-28 20:01



Denn wenn Sie keine Kopie erstellen, können die Indizes auch an anderer Stelle manipuliert werden, auch wenn Sie den Datenrahmen einem anderen Namen zuweisen.

Beispielsweise:

df2 = df
func1(df2)
func2(df)

func1 kann df modifizieren, indem df2 geändert wird, um Folgendes zu vermeiden:

df2 = df.copy()
func1(df2)
func2(df)

25
2017-09-22 01:27



Es ist wichtig zu erwähnen, dass das Zurückkopieren oder Anzeigen von der Art der Indexierung abhängt.

Die Pandas Dokumentation sagt:

Eine Ansicht gegen eine Kopie zurückgeben

Die Regeln darüber, wann eine Sicht auf die Daten zurückgegeben wird, sind vollständig   abhängig von NumPy. Wann immer ein Array von Labels oder ein boolescher Vektor   an der Indexierung beteiligt sind, wird das Ergebnis eine Kopie sein.   Bei der Einzelmarkierung / Skalar-Indexierung und dem Slicing, z.B. df.ix [3: 6] oder   df.ix [:, 'A'], wird eine Ansicht zurückgegeben.


8
2018-01-20 13:22



Im Allgemeinen ist es sicherer, an Kopien als an Original-Datenrahmen zu arbeiten, außer wenn Sie wissen, dass Sie das Original nicht mehr benötigen und mit der manipulierten Version fortfahren möchten. Normalerweise würden Sie den ursprünglichen Datenrahmen immer noch verwenden, um ihn mit der manipulierten Version usw. zu vergleichen. Daher arbeiten die meisten Leute am Ende an Kopien und Zusammenführungen.


1
2018-03-28 23:31