You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Pandas的df.values产生额外内存消耗,能否仅生成原数据视图?

关于pandas DataFrame生成numpy视图降低内存消耗的解决方案

你调用df[x_columns].values产生副本,核心是两个原因:一是.values本身存在隐式复制的逻辑,pandas 1.0+版本已经不推荐使用该属性;二是如果你选中的x_columns不是底层连续存储的同类型列,pandas需要重新拼接数据产生副本。

对应解决方法如下:

  • 优先使用to_numpy方法替代.values:调用df[x_columns].to_numpy(dtype='float32', copy=False)即可。copy=False参数会强制pandas优先返回原数据的视图,仅当无法生成视图时才会抛出错误,不会像.values一样隐式生成副本。由于你的所有列都是float32类型,只要选中的列在底层是连续存储的同类型块,就能直接拿到无复制的视图。
  • 如果选中的列不连续无法生成视图,可以先调整DataFrame的列顺序,把所有要用到的x_columns调整为连续的位置,确保中间没有其他类型的列穿插,调整完成后再用上述to_numpy方法就能拿到视图。
  • 如果你无法调整列顺序,且使用的机器学习算法支持numpy结构化数组输入,可以调用df[x_columns].to_records(index=False)生成结构化数组视图,不需要将数据拍平为连续内存块,不过该方案的框架兼容性相对较差。

注意:生成的视图和原DataFrame共享内存,修改视图内的数值会同步修改原DataFrame的数据,如果需要修改输入数据请显式调用copy()方法生成独立副本。

内容的提问来源于stack exchange,提问作者DiveIntoML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:00:04