嗨,我遇到了一些有趣的行为,我找不到解释。
我有个叫combinedDict的白痴。它有字符串键,它的元素是熊猫的数据。
我想选择名为“早期”的数据格式。我创建了一个变量,等于该数据。然后,我希望通过将字符串'_early‘附加到该列的每一行来编辑该数据文件中的ID列。我使用以下代码执行此操作:
a = combinedDict['early']
a['ID'] = [(s + '_early') for s in a['ID'].tolist()]当我这样做时,字符串'_early‘被追加到dataframe中列的每一行,但它也被附加到存储在组合式do’every‘中的每一行数据。
另一方面,当我使用以下代码添加.copy()时,只有dataframe会受到影响,而存储在组合式code‘use’中的则不会受到影响。这是我第一次遇到这种行为。这仅仅是熊猫数据的一个特征吗?
发布于 2016-03-24 15:33:50
让我们试试这个:
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']的引用
以下是文档的摘录
的可变性与数据的复制 所有的熊猫数据结构都是值可变的(它们包含的值可以改变),但并不总是大小可变的。无法更改Series的长度,但可以将列插入到DataFrame中。然而,绝大多数方法都会产生新的对象,并将输入数据保持不变。不过,总的来说,我们喜欢在明智的地方支持不可变的。
https://stackoverflow.com/questions/36203931
复制相似问题