2016-05-29 12 views
1

これはPythonのコードの断片です。このコードはデータフレームX_real_zerosを完全に変更しますが、Xを変更する理由は何ですか?2つのデータフレームを持つPythonラムダ関数

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) 

私はこのようなものに適用した場合:

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

をあなたが作成しないでくださいX_real_zeros = X時に初期データフレームXに

+0

ありがとうございます!それは実際に動作します。 –

答えて

1

をX [列]を変更しません。 X_real_zerosという名前のXのコピーを作成すると、X_real_zerosというデータフレームで新しいバインディングを作成します。これはXであり、X_real_zerosはメモリ内の同じ領域を指します。リストや辞書と同じように動作しますが、解決方法は明示的なコピーを使用することです。

X_real_zeros = X.copy() 
2

問題ではなく、ちょうどあなたが使用する必要があります割り当てると、このラインX_real_zeros = Xである:

X_real_zeros = X.copy() 

あなたはより多くの情報のためwhy should I make a copy of a data frame in pandasを参照してもよいです。

0

あなたはX_real_zerosがX_real_zerosが変異しますようにXをオブジェクトへの内部リファレンスを割り当てられている

X_real_zeros = X 

を割り当てると、Xも値を変更します。安全に、変数をコピーし実行します。

X.copy() 

これは、Xの新しいコピーを作成し、あなたが安全にX_real_zerosを変更することができます。

関連する問題