将同一DataFrame存入字典多份后修改为何同步变化?如何解决?
字典中多DataFrame修改同步的问题及解决
问题重现
你初始化了一个DataFrame并三次赋值给字典的不同键,代码如下(注:原代码中变量名存在不一致,已修正为dict_strat):
import pandas as pd df = pd.DataFrame({'A': [2, 2], 'B': [2, 2]}) dict_strat = {} for i in range(3): dict_strat['Df {0}'.format(i)] = df
当执行以下修改操作时:
dict_strat['Df 0'].iloc[0, :] = 9
发现字典中所有DataFrame的内容都被修改了。
原因分析
Python中,可变对象(如Pandas的DataFrame)的赋值操作传递的是对象引用,而非创建新的对象副本。你在循环中把df赋值给字典的不同键,本质是让这三个键都指向内存中同一个DataFrame对象。因此,无论通过哪个键修改数据,都是在修改同一个底层对象,所有引用该对象的字典元素自然会同步变化。
解决方法
每次赋值时创建DataFrame的独立副本,使用Pandas提供的copy()方法:
- 浅拷贝(默认行为):
df.copy(),适用于DataFrame中无嵌套可变对象(如列表、字典)的场景,仅复制顶层数据,执行效率更高。 - 深拷贝:
df.copy(deep=True),会递归复制所有嵌套的可变对象,确保新对象与原对象完全独立。
修改后的代码如下:
import pandas as pd df = pd.DataFrame({'A': [2, 2], 'B': [2, 2]}) dict_strat = {} for i in range(3): dict_strat['Df {0}'.format(i)] = df.copy()
此时字典中每个键都对应一个独立的DataFrame对象,修改其中一个不会影响其他元素。
内容的提问来源于stack exchange,提问作者Davi
相关产品推荐
相关产品推荐

