当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。