Pandas 2.2+ 中 PyArrow dtype 的内存优化机制解析

张开发
2026/4/6 19:48:16 15 分钟阅读

分享文章

Pandas 2.2+ 中 PyArrow dtype 的内存优化机制解析
Pandas 使用 float64[pyarrow] 类型时切分与拼接 DataFrame 几乎不增加内存占用其核心原因是底层启用了 Copy-on-Write写时复制机制避免了不必要的数据拷贝。 pandas 使用 float64[pyarrow] 类型时切分与拼接 dataframe 几乎不增加内存占用其核心原因是底层启用了 copy-on-write写时复制机制避免了不必要的数据拷贝。在 Pandas 2.2 及更高版本中引入了 Copy-on-WriteCoW 这一关键内存优化策略当对 DataFrame 或 Series 执行视图操作如列切片 .loc[:, cols]、行切片、.copy(deepFalse) 等时Pandas 不再立即复制底层数据而是共享同一份物理内存仅当某一部分数据被实际修改例如赋值 df.loc[0, col] 42时才触发浅层拷贝或按需深拷贝确保语义正确性与内存效率的平衡。值得注意的是PyArrow-backed dtypes如 float64[pyarrow]默认启用 CoW 行为而传统 NumPy-backed dtypes如 float64在默认配置下仍采用“保守复制”策略——即每次切片或 concat 都可能生成新副本导致内存用量线性增长如问题中观察到的 3× 占用。以下代码可验证该机制import pandas as pdimport numpy as np# 启用全局 CoW适用于所有 dtypepd.set_option(mode.copy_on_write, True)# 对比实验NumPy float64启用 CoW 后行为趋同df_np pd.DataFrame(np.ones((1_000_000, 5)), dtypefloat64)split_a df_np.iloc[:, :2]split_b df_np.iloc[:, 2:]joined pd.concat([split_a, split_b], axis1)# 内存占用将显著降低接近 PyArrow 版本表现而使用 PyArrow dtype 时无需显式设置即可享受 CoW 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

更多文章