2016-04-07 8 views
0

documentationと多くのSOの回答は、「子」DataFrameへの割り当てが(親条件の)DataFrameに反映される場合とされない場合があることを明確にしています。親への割り当てDataFrameは子のDataFrameに影響しますか?

「親」DataFrameへの割り当てが「子」DataFrameに反映される場合とされない場合は、は全く同じ条件に依存しますか?

"親" DataFrameに割り当てるときに警告が発生しないようです。これはドキュメンテーションで議論されていません。ドキュメントから

df_parent = pd.DataFrame({'a': [2,2,3,3], 'b': range(4)}) 
df_child = df_parent[df_parent['a']==2] 
df_child.loc[0,'a'] = 100 # `SettingWithCopy` warning 
df_parent.loc[0, 'a'] = 1000 # no warning; but unclear if df_child is updated? 
+0

を 'df_child'は何ですか?あなたの例では定義しません。 – BrenBarn

+0

@BrenBarn oops fixed。 – max

答えて

0

すべてのパンダのデータ構造は価値可変(彼らは が含まれている値を変更することができます)常にではないがサイズ変更可能です。シリーズ の長さは変更できませんが、たとえば、 DataFrameに列を挿入できます。しかし、大部分のメソッドでは新しいオブジェクト が生成され、入力データは変更されません。しかし、一般的には、 が好きな場合は不変を好むと思います。

それは両方の方向に "の作品":あなたはDFの独立したコピーしたい場合は

In [83]: df 
Out[83]: 
    a b c 
0 0 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

In [84]: copy.ix[0,'a'] = 100 

In [85]: copy 
Out[85]: 
    a b c 
0 100 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

In [86]: df 
Out[86]: 
    a b c 
0 100 9 5 
1 9 1 5 
2 7 0 0 
3 3 6 9 
4 4 0 8 
5 4 5 8 
6 1 3 6 
7 4 4 9 
8 6 7 4 
9 2 9 6 

使用.copy()を:

In [89]: df 
Out[89]: 
    a b c 
0 3 4 2 
1 9 5 1 
2 1 9 0 

In [90]: copy = df.copy() 

In [91]: df.ix[0,'a'] = 100 

In [92]: df 
Out[92]: 
    a b c 
0 100 4 2 
1 9 5 1 
2 1 9 0 

In [93]: copy 
Out[93]: 
    a b c 
0 3 4 2 
1 9 5 1 
2 1 9 0 
+0

親DFは実際にどの子DFにリンクされているかわからないので、 'SettingWithCopy'警告はありません。 – max

関連する問題