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

pandas中df.drop(inplace=True)与df=df.drop()的区别及性能差异

pandas两种drop列写法的性能差异与底层原因

日常做DataFrame列删除时常见的两种写法:

# 写法1:返回新对象后重新赋值
df = df.drop([columns], axis=1)
# 写法2:开启inplace原地修改
df.drop([columns], axis=1, inplace=True)

性能结论

常规场景下inplace=True的写法CPU、内存消耗都显著更低,二者的性能差距会随着DataFrame体量增大被放大,处理GB级以上数据时差异会非常明显。

底层逻辑说明

  • 非inplace的赋值写法执行流程:
    pandas默认的drop逻辑是不可变对象风格,不开inplace参数时,会先把所有需要保留的列全量拷贝一份,生成一个全新的DataFrame对象,再把当前的df变量重新绑定到这个新对象上。原来的旧DataFrame不会立刻消失,要等到Python垃圾回收机制判定没有任何变量引用它时,才会被回收释放内存。
    这个流程的额外开销非常明确:CPU要承担整份数据拷贝的计算量,内存会在拷贝阶段出现峰值——此时内存里同时存在旧DataFrame和新DataFrame两份完整数据,峰值占用接近原数据内存的2倍。
  • inplace=True的原地修改写法执行流程:
    开启inplace后,pandas不会生成全量的新DataFrame,而是直接操作原有DataFrame的底层BlockManager结构:只需要调整列索引的映射关系,把待删除列对应的内存块引用移除即可,不需要拷贝所有保留列的实际数据。
    这个过程的CPU开销只有少量索引结构调整的成本,几乎可以忽略;内存上也不会出现双份数据并存的峰值,仅需要消耗极少量存储新索引结构的内存,整体资源占用低很多。

补充说明

这里要提一个容易踩的坑:如果原来的df被其他变量引用过,inplace=True会直接修改所有引用指向的原始对象,很容易引发意料之外的逻辑错误。如果代码里存在多变量引用同一个DataFrame的场景,哪怕非inplace写法性能差一点,也更推荐用重新赋值的写法保证逻辑安全。pandas后续版本逐步降低inplace参数的推荐优先级,也完全是出于代码安全性的考虑,和性能表现无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:45:32