DataFrame.copy(deep=True)
复制此对象的索引和数据。
当deep=True
(默认)时,将使用调用对象的数据和索引的副本创建新对象。对副本的数据或索引的修改不会反映在原始对象中(请参阅下面的注释)。
当deep=False
,将创建一个新对象而不复制调用对象的数据或索引(仅复制对数据和索引的引用)。对原始数据的任何更改都将反映在浅层副本中(反之亦然)。
参数: | deep : 创建深层副本,包括数据和索引的副本。随着deep=False无论是指数还是数据复制。 |
返回: | copy : 对象类型与调用者匹配。 |
Notes
当deep=True
,数据被复制但实际的Python对象不会被递归复制,只能引用该对象。这与标准库中的copy.deepcopy
形成对比,后者以递归方式复制对象数据(请参阅下面的示例)。
在Index复制对象时deep=True
,由于性能原因,不会复制基础numpy
数组。由于Index是不可变的,因此可以安全地共享基础数据并且不需要副本。
例子
1)copy() 方法的基本用法
import pandas as pd # 创建一个简单的 DataFrame df = pd.DataFrame({ 'A': [1, 2, 3], 'B': [4, 5, 6] }) # 使用 copy() 方法创建副本 df_copy = df.copy() # 修改副本的值,不影响原始数据 df_copy['A'] = [10, 20, 30] print("原始 DataFrame:") print(df) print("\n复制后的 DataFrame:") print(df_copy)
2)基本的深拷贝和浅拷贝
import pandas as pd # 创建一个 Series s = pd.Series([1, 2], index=["a", "b"]) # 默认(深层)拷贝 deep = s.copy() print("深层副本:") print(deep) # 浅拷贝 shallow = s.copy(deep=False) print("\n浅拷贝:") print(shallow) # 测试浅拷贝和原始数据共享数据和索引 print("\ns is shallow:", s is shallow) print("s.values is shallow.values and s.index is shallow.index:", s.values is shallow.values and s.index is shallow.index) # 测试深层副本具有自己的数据和索引副本 print("\ns is deep:", s is deep) print("s.values is deep.values or s.index is deep.index:", s.values is deep.values or s.index is deep.index) # 更新原始数据和浅拷贝的数据,观察结果 s[0] = 3 shallow[1] = 4 print("\n更新后的原始数据:") print(s) print("\n更新后的浅拷贝:") print(shallow) print("\n深层副本保持不变:") print(deep)
3)包含嵌套列表的深拷贝
import pandas as pd # 包含嵌套列表的深拷贝示例 s = pd.Series([[1, 2], [3, 4]]) deep = s.copy() # 更新嵌套列表中的值 s[0][0] = 10 print("\n更新后的原始数据:") print(s) print("\n更新后的深层副本:") print(deep)