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 DataFrame的深拷贝和浅拷贝机制。深入探讨了deep参数的作用,以及在不同情况下,如何影响原始数据和拷贝数据之间的联系。特别注意的是,即使在深拷贝的情况下,Python对象的引用并不会被递归拷贝,这与标准库中的deepcopy行为有所不同。

2502

被折叠的 条评论
为什么被折叠?



