pandas.DataFrame.copy

DateFrame.copy(deep=True) 

复制object的索引和数据

  • 当deep=True时(默认), 会创建一个新的对象进行拷贝. 修改这份拷贝不会对原有对象产生影响.
  • 当deep=False时, 新的对象只是原有对象的references. 任何对新对象的改变都会影响到原有对象

Parameters: deep: bool, default True
Returns: copy: Series, DataFrame or Panel, Object type matches caller

Notes

当deep=True时, 数据会被拷贝, 但是实际的Python对象不会被递归的拷贝, 只有reference指向对象. 这是与标准库中copy.deepcopy的区别, 其递归的拷贝了object data.

当deep=True且是Index对象被拷贝时, 因为性能的原因位于其下的numpy array不会被拷贝. 由于Index是不可变的, 其下的数据可以被安全的分享, 所以拷贝他们是没必要的.

Python对象不会被递归拷贝的举例

在下面这个例子中存在Python的列表对象, 当s的列表对象的元素更改时, deep的也会跟着改动

In [30]: s = pd.Series([[1, 2],[3, 4]])                         

In [31]: s                                                      
Out[31]: 
0    [1, 2]
1    [3, 4]
dtype: object

In [32]: deep = s.copy()                                        

In [34]: s[0][0] = 10                                           

In [35]: s                                                      
Out[35]: 
0    [10, 2]
1     [3, 4]
dtype: object

In [36]: deep                                                   
Out[36]: 
0    [10, 2]
1     [3, 4]
dtype: object

你可能感兴趣的:(Pandas)