您好我遇到了一些我无法解释的有趣行为。
我有一个名为combinedDict的字典。它有字符串键,其元素是pandas数据帧。
我想选择名为' early'的数据帧。我创建了一个等于该数据帧的变量 a 。然后,我想通过附加字符串' _early'来编辑该数据框中的ID列。到该列的每一行。我使用以下代码执行此操作:
a = combinedDict['early']
a['ID'] = [(s + '_early') for s in a['ID'].tolist()]
当我这样做时,字符串' _early'被附加到数据帧a中列的每一行,但它也附加到combinedDict ['早期']中存储的数据帧的每一行。
另一方面,当我使用以下代码添加.copy()时,只有数据框a受影响,而存储在combinedDict ['早期']中的数据框不受影响。这是我第一次遇到这种行为。这只是pandas数据帧的一个特性吗?
答案 0 :(得分:0)
我们试试这个:
In [87]: df1 = pd.DataFrame({'a': [1,2,3,4,5,6,7,8,9]})
In [88]: df1
Out[88]:
a
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
In [89]: df2 = df1
In [90]: id(df1) == id(df2)
Out[90]: True
In [91]: df2.ix[df2.a > 4, 'a'] = 0
In [92]: df1
Out[92]:
a
0 1
1 2
2 3
3 4
4 0
5 0
6 0
7 0
8 0
因此a
是参考到combinedDict['early']
以下摘自documentation:
数据的可变性和复制
所有pandas数据结构都是 value-mutable(它们包含的值可以改变)但并非总是如此 大小可变的。系列的长度不能改变,但是,为 例如,可以将列插入到DataFrame中。但是,广阔 大多数方法产生新对象并保留输入数据 不变。但总的来说,我们喜欢支持不变性 明智的。