使用loc与fillna填充DataFrame指定列空值无效问题求助
问题原因分析
你遇到的问题核心是:loc切片返回的是原DataFrame的副本而非视图,导致fillna(inplace=True)只修改了临时副本,原DataFrame没有变化。
pandas的索引机制中,当对DataFrame进行列切片时,如果切片的列在内存中不是连续存储,或者pandas无法明确判断是否可以返回视图,就会默认返回副本。这时候inplace=True的修改只会作用在这个副本上,原数据不受影响。
可行解决方案
直接赋值替换(最稳妥)
放弃inplace=True,将填充后的结果直接赋值回原DataFrame的对应列:candy.loc[:,'Q6 | 100 Grand Bar':'Q11: DAY'] = candy.loc[:,'Q6 | 100 Grand Bar':'Q11: DAY'].fillna('NO_ANSWER')先提取列名再操作
先获取目标列的名称列表,再针对这些列进行填充赋值,避免切片返回副本的问题:target_cols = candy.loc[:,'Q6 | 100 Grand Bar':'Q11: DAY'].columns candy[target_cols] = candy[target_cols].fillna('NO_ANSWER')用
fillna指定列填充值
构造列与填充值的映射字典,直接在原DataFrame上执行填充:fill_map = {col: 'NO_ANSWER' for col in candy.loc[:,'Q6 | 100 Grand Bar':'Q11: DAY'].columns} candy.fillna(fill_map, inplace=True)
内容的提问来源于stack exchange,提问作者Cha
相关产品推荐
相关产品推荐

