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

使用Pandas fillna(inplace=True)时如何避免关联DataFrame被修改?

如何避免关联的DataFrame被fillna(inplace=True)修改?

嘿,这个问题的核心其实是Python的对象引用机制在搞事情!当你执行df2 = df的时候,并没有创建一个全新的DataFrame副本——df2只是和df指向了内存里的同一个对象而已。所以当你用fillna(..., inplace=True)直接修改这个对象时,df2自然也会跟着变,因为它俩本来就是同一个东西。

要解决这个问题,有两种常用的方法:

方法1:创建DataFrame的深拷贝

在赋值的时候,用copy()方法创建一个完全独立的副本,这样df和df2就指向不同的对象了,修改其中一个不会影响另一个:

import numpy as np
import pandas as pd
df = pd.DataFrame([[np.nan, 2, 1, 0], [3, 4, np.nan, 1], [np.nan, np.nan, 8, 5], [np.nan, 3, np.nan, 4]], columns=list('ABCD'))
df2 = df.copy()  # 这里用copy()创建独立副本
df.fillna(value = df.mean(), inplace=True)
# 现在df被修改了,但df2还是原来的未填充状态

方法2:放弃使用inplace=True,直接赋值新变量

如果你不需要修改原df,完全可以不用inplace=True,而是把填充后的结果赋值给一个新变量,原df保持不变,df2自然也不受影响:

import numpy as np
import pandas as pd
df = pd.DataFrame([[np.nan, 2, 1, 0], [3, 4, np.nan, 1], [np.nan, np.nan, 8, 5], [np.nan, 3, np.nan, 4]], columns=list('ABCD'))
df2 = df
df_filled = df.fillna(value = df.mean())  # 填充后赋值给新变量,原df不变
# 此时df和df2还是原来的未填充状态,df_filled是填充后的版本

简单来说,要么提前把df2做成独立副本,要么别直接修改原df,用赋值的方式保存结果就行~

内容的提问来源于stack exchange,提问作者apkul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:04