关于DataFrame合并与复制操作的疑问:为何列D值发生变化?
为什么testframe的D列值发生了变化?
问题核心是Pandas中DataFrame直接赋值是引用传递,而非数据拷贝:
- 当你执行
dataframe1 = testframe时,并没有生成testframe的副本,而是让dataframe1和testframe指向内存中同一个DataFrame对象。任何对其中一个变量的原地(inplace)修改,都会直接作用于这个共享对象,另一个变量的内容也会同步改变。
拆解你的代码操作影响:
- 初始创建
testframe,列包含A、B、C、D,D列值为1。 dataframe1 = testframe后,两个变量完全共享同一对象,没有独立的数据副本。- 执行
dataframe1.drop(['C'], axis=1, inplace=True):因为inplace=True,直接修改了共享的DataFrame,此时testframe也已经没有C列(你最终输出中出现C列,可能是代码执行过程中存在未标注的操作,或是误解了testframe的实时状态)。 - 你注释中提到的修改
dataframe1的D列值为2这一步:由于两个变量共享对象,testframe的D列值也同步变成了2——这就是你疑惑的D列值变化的原因。 - 后续
dataframe1.rename(columns={"D": "E"}, inplace=True)同样是原地修改共享对象,此时testframe的列也变为A、B、E。 - 最后合并操作时,你实际上是让同一个对象和自身进行join,最终输出的重复列(D、E)也源于此。
如果要避免这种相互影响的情况,需要创建独立的副本,改用:
dataframe1 = testframe.copy() # 深拷贝,生成完全独立的DataFrame对象
内容的提问来源于stack exchange,提问作者Rui
相关产品推荐
相关产品推荐

