pandas替换None为np.nan后做字段映射,None重新出现如何解决?
错误原因
你的问题核心出在维度归约的自定义函数reduce_housing_status中,Homeless分类的分支漏写了return关键字。
Python的函数如果没有显式声明return返回值,执行完对应分支的逻辑后会默认返回None。你代码中elif x in Homeless:分支下仅写了字符串'Homeless',没有加return,所以所有属于这个分类的原始有效值,都会被函数处理成None,这就是映射后重新出现空值的直接原因。
至于二次运行映射后None消失的现象,大概率是你二次运行时完整重跑了「替换None为np.nan→众数填充空值→映射」的全流程,而不是在第一次映射得到None的结果上单独执行映射逻辑。如果直接在第一次映射后的结果上单独重跑映射,这些None会进入else分支原样返回,不会消失。
修正方案
补全Homeless分支的return语句即可:
def reduce_housing_status(x): if x in Own: return 'Own' elif x in Rent: return 'Rent' elif x in Homeless: return 'Homeless' elif x in Live_with_Others: return 'Live_with_Others' elif x in Treatment_Facility: return 'Treatment_Facility' else: return x
内容的提问来源于stack exchange,提问作者samdep
相关产品推荐
相关产品推荐

