为何Pandas中修改临时DataFrame的replace操作会影响原DataFrame?
问题:修改临时DataFrame时原DataFrame被改动的原因
我希望创建一个临时DataFrame,将其中的NaN值替换为0,且不改动原DataFrame。但发现将df_2中的NaN替换为0后,df_1的对应列也发生了变化,请问创建df_2时是否存在操作错误?
原代码
import numpy as np import pandas as pd d = {'A':[np.nan, np.nan],'B':[1,2]} df_1 = pd.DataFrame(data=d) df_2 = df_1 print(df_1) print(df_2) df_2['A'] = df_2['A'].replace(np.nan,0) print(df_1) print(df_2)
原输出
A B 0 NaN 1 1 NaN 2 A B 0 NaN 1 1 NaN 2 A B 0 0.0 1 1 0.0 2 A B 0 0.0 1 1 0.0 2
解答
是的,创建df_2时的操作存在错误。df_2 = df_1并没有生成新的DataFrame,只是让df_2和df_1指向内存中同一个数据对象——相当于给同一个数据起了两个名字,所以对df_2的修改会直接同步到df_1上。
要创建独立于原DataFrame的临时副本,必须使用copy()方法:
修改后的代码
import numpy as np import pandas as pd d = {'A':[np.nan, np.nan],'B':[1,2]} df_1 = pd.DataFrame(data=d) df_2 = df_1.copy() # 创建独立副本 print(df_1) print(df_2) df_2['A'] = df_2['A'].replace(np.nan,0) print(df_1) print(df_2)
修改后的输出
A B 0 NaN 1 1 NaN 2 A B 0 NaN 1 1 NaN 2 A B 0 NaN 1 1 NaN 2 A B 0 0.0 1 1 0.0 2
可以看到,此时修改df_2的列A后,原df_1的数据完全不受影响,符合你的需求。
内容的提问来源于stack exchange,提问作者Marcus Leiwe
相关产品推荐
相关产品推荐

