2017-10-23 10 views
2

私はパンダの同じDataFrame内の行を交換しようとしています。同じパンダデータフレーム内の行を交換する

Iは

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 

を実行してみたが、私はちょうど第二列(3,4)の値を示す行の両方で終わります。

変数bとcも、3と4の両方に割り当てられましたが、私はそれらを再度割り当てませんでした。私は何か間違っているのですか?

ザック

答えて

3

あなたが値を変更しているので、チェーン、すなわち上でそれらを割り当てているときにデータをコピー使用していない限り、.copy()を使用して値を格納するための一時的なvaraibleを使用して直接変更されます。

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 

それとも直接

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

のようなコピーを使用することができますああ、これは問題を解決しました。どうもありがとう!私はまだ値がチェーン上にあるかどうか不安です。新しい変数を割り当てるときに '.copy()'メソッドを使うだけで安全だと言いますか? – Zac

+0

デフォルトでは、これらはメインオブジェクトへの参照を保持します。どんな変更をしても、主な目的に反映されます。だからコピーが必要です。 – Dark

+0

それが有用であれば解決策を受け入れるか – Dark

関連する問題