困っているというか、気になったこと
pandasにおけるデータフレームのコピーの挙動について質問があります。
まず、データフレームを複製したい場合には
df2 = df
ではdf2がdfへのリンク(ポインタ?)になってしまうので、
df2 = df.copy()
というようにする、ということはわかりました。
(参考)
pandasのDataFlameのコピーは”=”じゃだめ
pandasで=でコピーした場合とcopy()を使った場合の挙動の違い
<Python, pandas> DataFlame.copy()
しかし、copy
なしの=
だけでも複製できるケースがあることに気付きました。
該当のソースコード
まず、複製できていないケースの=
です。
Python
1df = pd.DataFrame(data=[(0,1),(2,3)]) 2df2 = df 3df2.iloc[0,0]=9999 4print(df) 5print(df2)
Output
1(df) 2 0 1 30 9999 1 41 2 3 5(df2) 6 0 1 70 9999 1 81 2 3
これは先程述べたように上手くいっていません。
しかし、次のように書いた場合、
Python
1df = pd.DataFrame(data=[(0,1),(2,3)]) 2df2 = df[[True,True]] 3df2.iloc[0,0]=9999 4print(df) 5print(df2)
Output
1(df) 2 0 1 30 0 1 41 2 3 5(df2) 6 0 1 70 9999 1 81 2 3
と、何故か上手くいっています……。
ちなみに、df2 = df[:]
ではうまくいきませんでした。
どなたか、この辺の挙動について、ご説明いただけないでしょうか……?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/21 02:46