为什么pandas的fillna()的inplace参数对多列操作不生效?
这是pandas的正常行为,并非代码语法出错。
问题原因
1. 填充操作不生效的原因
你通过data.loc[:, var_categor]取数时,pandas返回的是原数据集的临时副本,而非直接关联原数据的视图。inplace=True仅会修改这个临时副本,而该副本在当前行代码执行完成后就会被回收,原数据集完全没有被改动,因此后续统计缺失值时数量没有变化。
2. 无警告提示的原因
pandas的SettingWithCopyWarning(修改副本警告)的触发逻辑非常保守,只有当引擎明确判定你正在修改一个和原数据脱离关联的副本时,才会抛出警告。使用.loc进行多列切片后直接调用方法的操作,属于pandas当前判定逻辑的模糊区间,引擎无法100%确认你操作的是副本,因此不会触发任何警告或报错。
正确的实现方案
方案1:放弃inplace参数,直接将填充后的结果赋值回原数据集的对应列
data.loc[:, var_categor] = data.loc[:, var_categor].fillna("Missing")
方案2:直接对原数据集调用fillna,通过subset参数指定要填充的列
data.fillna("Missing", subset=var_categor, inplace=True)
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

