Pandas中replace操作同步修改关联原DataFrame的原因与解决方法
原因
pandas DataFrame是Python中的可变对象,df2 = df1的写法属于引用赋值,不会生成新的DataFrame对象,只是让df2和df1两个变量指向内存中同一份数据集。此时对df2做的任何列修改、值修改,本质都是操作同一份底层数据,df1自然会同步变动。
解决方法
对df1做独立拷贝后再赋值给df2即可,常规数据场景下直接调用pandas内置的copy()方法生成深拷贝,就能完全隔离两个DataFrame的修改影响,参考代码:
import pandas as pd import numpy as np # 原始构造逻辑 df1 = pd.DataFrame([[1,2],['a',1]]) df1 = df1.replace(1, np.nan) # 生成独立副本,不直接引用原对象 df2 = df1.copy() df2[1] = df2[1].replace(np.nan, 0)
执行上述代码后,df1会保留替换NaN后的原始状态,仅df2的第1列会完成NaN替换为0的操作,不会出现原数据被联动修改的问题。
内容的提问来源于stack exchange,提问作者Dmitrii Urentsov
相关产品推荐
相关产品推荐

