看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Copy-on-Write(简称 CoW)是一种内存管理技术,用于优化数据复制的性能和资源利用。它的核心思想是:当多个对象或进程共享同一份数据时,只有在需要修改数据时才真正执行复制操作。对于 pandas 来说,这种机制的引入旨在提高内存效率并减少不必要的数据复制。
从 pandas 3.0 开始,Copy-on-Write 模式将默认启用。它对 pandas 的数据操作行为带来了深远影响:
之前行为问题:
DataFrame
的切片(例如 df2 = df1[['col1', 'col2']]
)通常会创建视图(view),而不是完整的副本(copy)。DataFrame
,这是一个常见的陷阱。.copy()
),会增加不必要的内存开销。引入 Copy-on-Write:
以下是 Copy-on-Write 在 pandas 中的基本工作流程:
DataFrame
或 Series
被切片或赋值时,它会共享底层数据的引用,而不实际创建副本。.copy()
。以下是 CoW 模式的一个示例对比:
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df2 = df1[["A"]] # 可能是视图
df2.iloc[0, 0] = 100 # 会修改 df1,导致意外影响
pd.options.mode.copy_on_write = True # 启用 CoW 模式
df1 = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df2 = df1[["A"]] # 共享数据引用
df2.iloc[0, 0] = 100 # 修改触发复制,df1 不会被影响
从 pandas 2.0 开始,可以通过以下选项启用:
# 或设置为 'warn' 以查看潜在的副本行为
pd.options.mode.copy_on_write = True
从 pandas 3.0 开始,该模式将成为默认行为。
Copy-on-Write 是 pandas 在内存管理方面的一次重要改进,通过优化数据共享和修改机制,既提升了性能,又增强了用户体验。这一变化将显著减少意外数据修改的风险,是未来 pandas 数据操作的核心特性之一。
更新时间:2024-11-27 14:09:58 标签:pandas python 复制 cow