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

关于DataFrame合并与复制操作的疑问:为何列D值发生变化?

为什么testframe的D列值发生了变化?

问题核心是Pandas中DataFrame直接赋值是引用传递,而非数据拷贝:

  • 当你执行dataframe1 = testframe时,并没有生成testframe的副本,而是让dataframe1和testframe指向内存中同一个DataFrame对象。任何对其中一个变量的原地(inplace)修改,都会直接作用于这个共享对象,另一个变量的内容也会同步改变。

拆解你的代码操作影响:

  1. 初始创建testframe,列包含A、B、C、D,D列值为1。
  2. dataframe1 = testframe后,两个变量完全共享同一对象,没有独立的数据副本。
  3. 执行dataframe1.drop(['C'], axis=1, inplace=True):因为inplace=True,直接修改了共享的DataFrame,此时testframe也已经没有C列(你最终输出中出现C列,可能是代码执行过程中存在未标注的操作,或是误解了testframe的实时状态)。
  4. 你注释中提到的修改dataframe1的D列值为2这一步:由于两个变量共享对象,testframe的D列值也同步变成了2——这就是你疑惑的D列值变化的原因。
  5. 后续dataframe1.rename(columns={"D": "E"}, inplace=True)同样是原地修改共享对象,此时testframe的列也变为A、B、E。
  6. 最后合并操作时,你实际上是让同一个对象和自身进行join,最终输出的重复列(D、E)也源于此。

如果要避免这种相互影响的情况,需要创建独立的副本,改用:

dataframe1 = testframe.copy()  # 深拷贝,生成完全独立的DataFrame对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:05:23