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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:42:09