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

为何迭代操作未正确修改全局DataFrame变量?

问题解析:嵌套循环后全局DataFrame为何全部变为同一值?

你的问题核心出在Python中对象的引用赋值上,具体来说:

关键原因:df2和df1指向同一个对象

df2 = df1 这行代码并没有创建新的DataFrame,只是给原有的df1对象多了一个别名(引用)。也就是说,df1和df2其实是同一个内存对象的两个名字,修改其中任何一个,另一个都会同步变化。

执行过程拆解

  1. 初始化后,df1指向一个DataFrame对象,df2 = df1 让df2和df1共享这个对象。
  2. 循环第一次迭代处理[df1,9]:此时修改的是那个唯一的DataFrame,把x、y列改成9,所以输出显示全9。
  3. 循环第二次迭代处理[df2,'z']:df2还是指向那个唯一的DataFrame,这次修改把x、y列改成z,输出显示全z。
  4. 最后打印df1和df2,自然都是z——因为它们从始至终都是同一个对象的不同名字。

解决办法

要让df2成为独立的DataFrame,必须使用复制操作:

  • 浅复制(适用于无嵌套可变对象的DataFrame):df2 = df1.copy()
  • 深复制(适用于包含列表、字典等嵌套可变对象的DataFrame):df2 = df1.deepcopy()

修改后的代码示例:

import pandas as pd

df1 = pd.DataFrame({
 'x': [1,2,3,4,5],
 'y': ['a', 'b', 'c', 'd', 'e']
})
# 创建独立的DataFrame副本
df2 = df1.copy()

for array in [[df1, 9], [df2, 'z']]:
 array[0]['x'] = array[1]
 array[0]['y'] = array[1]
 print(array[0])

print(df1)
print(df2)

执行后,df1会保持全9,df2保持全z,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:15:38