Pandas映射列值时返回全NaN问题及正确映射需求
问题解决步骤
问题根源
- 缺失值键不匹配:映射字典里用的是
"NaN",但数据里的缺失值是大写的"NAN",大小写不一致导致无法匹配。 - 字符串含多余空格:原始数据中人格类型字符串(比如
"INTP ")带有尾部空格,和字典里无空格的键无法匹配。 - Series操作错误:
q20 = castaway_details["personality_type"]得到的是一个Series,你却用q20["personality_type"]赋值,属于错误操作,应直接对Series本身进行映射。
修正后的代码
# 修正映射字典的缺失值键,改为大写"NAN" mapping = { "ISTJ":1, "ISTP":2, "ISFJ":3, "ISFP":4, "INFP":6, "INTJ":7, "INTP":8, "ESTP":9, "ESTJ":10, "ESFP":11, "ESFJ":12, "ENFP":13, "ENFJ":14, "ENTP":15, "ENTJ":16, "NAN": 17 } # 先去除字符串前后空格,再执行映射,直接修改原DataFrame castaway_details["personality_type"] = castaway_details["personality_type"].str.strip().map(mapping) # 若需保留原数据,可创建新列存储结果: # castaway_details["personality_score"] = castaway_details["personality_type"].str.strip().map(mapping)
验证结果
执行后DataFrame会符合你的期望输出:
| personality_type |
|---|
| 8 |
| 6 |
| 7 |
| 1 |
| 17 |
| 11 |
如果数据中存在真正的NaN(不是字符串格式的"NAN"),可额外用fillna补充处理:
castaway_details["personality_type"] = castaway_details["personality_type"].str.strip().map(mapping).fillna(17)
内容的提问来源于stack exchange,提问作者Ali_Khaled
相关产品推荐
相关产品推荐

