當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python pandas.DataFrame.copy用法及代碼示例


用法:

DataFrame.copy(deep=True)

製作此對象的索引和數據的副本。

deep=True(默認)時,將使用調用對象的數據和索引的副本創建一個新對象。對副本的數據或索引的修改不會反映在原始對象中(請參閱下麵的注釋)。

deep=False 時,將創建一個新對象,而不複製調用對象的數據或索引(僅複製對數據和索引的引用)。對原始數據的任何更改都將反映在淺拷貝中(反之亦然)。

參數

deep布爾值,默認為真

製作深層副本,包括數據和索引的副本。使用 deep=False 既不複製索引也不複製數據。

返回

copySeries或DataFrame

對象類型匹配調用者。

注意

deep=True 時,會複製數據,但不會遞歸複製實際的 Python 對象,隻會複製對對象的引用。這與標準庫中的 copy.deepcopy 形成對比,後者遞歸地複製對象數據(參見下麵的示例)。

雖然在 deep=True 時複製了 Index 對象,但出於性能原因,不會複製底層的 numpy 數組。由於Index 是不可變的,因此可以安全地共享底層數據並且不需要副本。

例子

>>> s = pd.Series([1, 2], index=["a", "b"])
>>> s
a    1
b    2
dtype:int64
>>> s_copy = s.copy()
>>> s_copy
a    1
b    2
dtype:int64

淺拷貝與默認(深)拷貝:

>>> s = pd.Series([1, 2], index=["a", "b"])
>>> deep = s.copy()
>>> shallow = s.copy(deep=False)

淺拷貝與原始拷貝共享數據和索引。

>>> s is shallow
False
>>> s.values is shallow.values and s.index is shallow.index
True

深拷貝有自己的數據和索引副本。

>>> s is deep
False
>>> s.values is deep.values or s.index is deep.index
False

淺拷貝和原始共享的數據的更新都反映在兩者中;深拷貝保持不變。

>>> s[0] = 3
>>> shallow[1] = 4
>>> s
a    3
b    4
dtype:int64
>>> shallow
a    3
b    4
dtype:int64
>>> deep
a    1
b    2
dtype:int64

請注意,當複製包含 Python 對象的對象時,深複製將複製數據,但不會遞歸地這樣做。更新嵌套數據對象將反映在深層副本中。

>>> s = pd.Series([[1, 2], [3, 4]])
>>> deep = s.copy()
>>> s[0][0] = 10
>>> s
0    [10, 2]
1     [3, 4]
dtype:object
>>> deep
0    [10, 2]
1     [3, 4]
dtype:object

相關用法


注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.DataFrame.copy。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。