documentation和众多的SO答案澄清了对孩子的分配" DataFrame可能会也可能不会反映在" parent" DataFrame(取决于某些条件)。
相反的情况如何:分配给父母"是真的吗? DataFrame可能会也可能不会反映在" child" DataFrame和取决于完全相同的条件?
我注意到在分配给父母"时,似乎没有提出SettingWithCopy
警告。数据帧;这也不是在文档中讨论的。
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 :(得分:0)
来自文档:
所有pandas数据结构都是值可变的(它们包含的值) 可以改变)但不总是大小可变的。系列的长度 无法更改,但是,例如,列可以插入到 数据帧。但是,绝大多数方法都会产生新的对象 并保持输入数据不变。但总的来说,我们喜欢 在合情合理的情况下支持不变性。
在两个方向上“工作”:
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
如果您想要DF的独立副本,请使用.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