文档和无数这样的答案说明,分配给“子”DataFrame可能会也可能不会反映在“父”DataFrame中(取决于某些条件)。
相反的情况又如何呢:分配给“父”DataFrame是否可以反映在“子”DataFrame中,而取决于完全相同的条件。
我注意到,当分配给“父”SettingWithCopy时,似乎不会引发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?发布于 2016-04-07 16:09:51
从文件中:
所有的熊猫数据结构都是值可变的(它们包含的值可以改变),但并不总是大小可变的。无法更改Series的长度,但可以将列插入到DataFrame中。然而,绝大多数方法都会产生新的对象,并将输入数据保持不变。不过,总的来说,我们喜欢在明智的地方坚持不变。
它在两个方向“起作用”:
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 0https://stackoverflow.com/questions/36481587
复制相似问题