Python pandas.DataFrame.copy函数方法的使用

Pandas 中,copy() 方法用于复制 DataFrame 或其子对象(如列、行等)。它是一个重要的方法,因为 Pandas 在处理数据时通常是按引用传递的,即修改某个对象可能会影响原始数据。copy() 方法可以创建数据的完整副本,避免这种问题。本文主要介绍一下Pandas中pandas.DataFrame.copy方法的使用。

DataFrame.copy(deep=True)

复制此对象的索引和数据。

deep=True(默认)时,将使用调用对象的数据和索引的副本创建新对象。对副本的数据或索引的修改不会反映在原始对象中(请参阅下面的注释)。

deep=False,将创建一个新对象而不复制调用对象的数据或索引(仅复制对数据和索引的引用)。对原始数据的任何更改都将反映在浅层副本中(反之亦然)。

参数

deep : bool,默认为True

创建深层副本,包括数据和索引的副本。随着deep=False无论是指数还是数据复制。

返回

copy : SeriesDataFramePanel

对象类型与调用者匹配。

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)

推荐阅读
cjavapy编程之路首页