あなたの答えはパンダドキュメントにあります:returning-a-view-versus-a-copyラベルの配列またはブールベクトルは、インデックス操作で 関与しているときはいつでも
、
結果は、コピーになります。 単一ラベル/スカラーインデックスとスライスでは、 など。 df.ix [3:6]またはdf.ix [:, 'A']、
ビューはに返されます。あなたの例では
、bar
はfoo
のスライスのビューです。 コピーが必要な場合は、copy
メソッドを使用できました。 bar
を変更すると、foo
も変更されます。 pandasはコピーオンライトメカニズムを持っていないようです。
は説明するために以下の私のコード例を参照してください。
In [1]: import pandas as pd
...: import numpy as np
...: foo = pd.DataFrame(np.random.random((10,5)))
...:
In [2]: pd.__version__
Out[2]: '0.12.0.dev-35312e4'
In [3]: np.__version__
Out[3]: '1.7.1'
In [4]: # DataFrame has copy method
...: foo_copy = foo.copy()
In [5]: bar = foo.iloc[3:5,1:4]
In [6]: bar == foo.iloc[3:5,1:4] == foo_copy.iloc[3:5,1:4]
Out[6]:
1 2 3
3 True True True
4 True True True
In [7]: # Changing the view
...: bar.ix[3,1] = 5
In [8]: # View and DataFrame still equal
...: bar == foo.iloc[3:5,1:4]
Out[8]:
1 2 3
3 True True True
4 True True True
In [9]: # It is now different from a copy of original
...: bar == foo_copy.iloc[3:5,1:4]
Out[9]:
1 2 3
3 False True True
4 True True True
をので、私は、[:, [ 'A'、 'B']]それはコピーを返しますが、bar.locを行うとき、私はbar.locを行うとき[:、 'a']ビューを返しますか? – Lisa