2016-05-29 8 views
1

Dies ist ein Fragment meines Codes in Python. Dieser Code ändert perfekt den Datenrahmen X_real_zeros, aber er ändert auch X, warum passiert es?Python-Lambda-Funktion mit 2 Datenrahmen

X_real_zeros = X 
for column in numeric_cols: 
    X_real_zeros[column] = X[column].apply(lambda x: 0 if np.isnan(x) == 1 else x) 

Wenn ich mich bewerben etwas wie folgt aus:

X['columnii'] = X[column].apply(lambda x: 0 if np.isnan(x) == 1 else x) 

Es wird nicht die X ändern [Spalte] in ersten Datenrahmen X.

+0

Danke an alle! Es funktioniert wirklich. –

Antwort

1

Wenn Sie X_real_zeros = X tun Sie kein erstellen Kopie von X namens X_real_zeros, Sie erstellen eine neue Bindung mit Ihrem Datenframe namens X_real_zeros, das heißt X und X_real_zeros zeigen auf den gleichen Speicherplatz im Speicher. Es funktioniert genauso wie mit Listen oder dict, die Lösung besteht darin, eine explizite Kopie zu verwenden.

X_real_zeros = X.copy() 
0

Wenn Sie

zuordnen
X_real_zeros = X 

X_real_zeros eine interne Referenz X. Objekt zugeordnet ist, um X_real_zeros mutiert wird, X ändert sich auch Werte. So kopieren Sie sicher Variablen tun:

X.copy() 

Dies wird eine neue Kopie von X und Sie in der Lage, sicher X_real_zeros zu ändern.

Verwandte Themen