修改新pandas DataFrame时旧DataFrame值意外变更问题咨询
问题产生原因
Python中的直接赋值操作y = x并没有创建新的DataFrame对象,只是给内存中已有的x指向的DataFrame对象新增了一个别名y,二者实际指向完全相同的内存地址。
由于Pandas DataFrame是可变对象,修改y的属性和内容本质就是修改二者共同指向的原始对象,所以会出现修改y同步影响x的现象。
避免方案
如果需要得到独立的新DataFrame,对新对象的修改不影响原始对象,需要调用copy()方法显式完成对象拷贝:
x = pd.DataFrame(data = {"test":["mkt1","mkt2","mkt3"], "test2":["cty1","cty2","cty3"]}) # 显式深拷贝,生成完全独立的新对象 y = x.copy() y["test"] = "boom" print(x)
运行上述代码后x的内容不会被y的修改影响。
额外说明:copy()方法默认参数为deep=True即深拷贝,会完整复制对象本体和内部所有数据,满足绝大多数使用场景;如果传入deep=False为浅拷贝,仅复制对象的容器结构,内部存储的元素还是引用共享,修改嵌套的可变类型内容时仍可能同步影响原对象,无特殊需求直接使用默认深拷贝即可。
内容的提问来源于stack exchange,提问作者HARI KRISHNA BANDARU
相关产品推荐
相关产品推荐

