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


Python Pandas DataFrame copy方法用法及代碼示例


Pandas DataFrame.copy(~)方法製作 DataFrame 的副本。您可以選擇是否想要深拷貝或一個淺拷貝.

A 深拷貝是一個全新的副本 - 修改 DataFrame 的深層副本不會改變原始 DataFrame,反之亦然。例外情況是當值是 Python 對象時;它們的屬性不是遞歸複製的,因此修改深層複製中的 Python 對象會改變原始對象,反之亦然.

A 淺拷貝與原始DataFrame 的數據共享相同的內存塊。這意味著如果您修改淺拷貝,則原始的 DataFrame 將發生變異,反之亦然。

參數

1.deep | boolean | optional

  • 如果 True ,則執行深度複製。

  • 如果 False ,則執行淺複製。

默認情況下,deep=True

返回值

DataFrame,它是源 DataFrame 的淺拷貝或深拷貝。

例子

深拷貝

考慮以下 DataFrame :

df = pd.DataFrame({"A":[1,2], "B":[3,4]})
df



   A  B
0  1  3
1  2  4

我們執行深度複製來創建 df_other ,並將其第一個值更改為 5

df_other = df.copy()   # deep=True
df_other.iloc[0,0] = 5
df_other



   A  B
0  5  3
1  2  4

然後我們檢查原始 DataFrame df 的狀態:

df



   A  B
0  1  3
1  2  4

我們看到原來的DataFrame 完好無損。這是因為我們執行的是深複製,而不是淺複製。

例外

當 DataFrame 的值是 Python 對象時要小心 - 它們的屬性不會遞歸複製,因此在深層複製中修改它們仍然會改變原始 DataFrame 中的對象。

考慮以下 DataFrame :

df = pd.DataFrame({"A":[[1,2],3], "B":[4,5]})
df



   A       B
0  [1,2]   4
1  3       5

我們製作 df 的新深層副本,並修改列表的第一個值:

df_other = df.copy(deep=True)
df_other.iloc[0,0][0] = 9      # Modify the first value in the Python list
df



   A       B
0  [9,2]   4
1  3       5

我們可以看到 df_other 中的更改反映在原始 df 中。反之亦然,即修改 df 中的 Python 列表會改變 df_other 中的 Python 列表。

淺複製

考慮以下 DataFrame :

df = pd.DataFrame({"A":[1,2], "B":[3,4]})
df



   A  B
0  1  3
1  2  4

我們執行淺複製來創建 df_other ,並將其第一個值更改為 5:

df_other = df.copy(deep=False)
df_other.iloc[0,0] = 5
df_other



   A  B
0  5  3
1  2  4

然後我們檢查原始 DataFrame df 的狀態:

df



   A  B
0  5  3
1  2  4

我們看到原來的DataFrame也被修改了,盡管我們從未直接修改過它。這是因為我們執行的是淺複製,而不是深複製。

此外,更改 df 也會修改 df_other

df.iloc[0,0] = 6
df_other



   A  B
0  6  3
1  2  4

相關用法


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