大熊猫数据帧的一个词:如何知道在dict或dict中的数据帧中引用数据帧的副本?

时间:2016-03-24 15:27:19

标签: python dictionary pandas

您好我遇到了一些我无法解释的有趣行为。

我有一个名为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数据帧的一个特性吗?

1 个答案:

答案 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中。但是,广阔   大多数方法产生新对象并保留输入数据   不变。但总的来说,我们喜欢支持不变性   明智的。