Pandas中使用map函数将整数转字符串时列值显示为NaN的问题
解决Pandas中map映射后出现NaN的问题
这种情况我之前也碰到过,大概率是键和列值的类型不匹配,或者列里存在不在映射字典范围内的值,咱们一步步来排查解决:
第一步:排查核心原因
先运行下面两个命令,确认列的类型和实际值:
# 查看列的数据类型 print(df['DayOfWeek'].dtype) # 查看列的所有唯一值 print(df['DayOfWeek'].unique())
常见的问题场景有两种:
- 列值是字符串类型的数字:比如列里存的是
'0'、'1'这种字符串,而你的字典dmap的键是整数0、1,类型不匹配就会返回NaN。 - 列里存在0-6之外的值:比如有
7或者其他不在字典键里的数值,这些值找不到对应映射就会变成NaN。
第二步:针对性解决
场景1:类型不匹配(字符串转整数)
如果列是字符串类型,先把它转成整数再映射:
# 先转换类型,再映射 df['DayOfWeek'] = df['DayOfWeek'].astype(int).map(dmap)
或者你也可以修改字典的键为字符串,和列值类型保持一致:
dmap = {'0':'Mon','1':'Tue','2':'Wed','3':'Thur','4':'Fri','5':'Sat','6':'Sun'} df['DayOfWeek'] = df['DayOfWeek'].map(dmap)
场景2:存在超出范围的值
如果列里有不在0-6的数值,你可以用dict.get()来给这些异常值设置默认值(比如'Unknown'),避免出现NaN:
df['DayOfWeek'] = df['DayOfWeek'].map(lambda x: dmap.get(x, 'Unknown'))
额外验证
修改完之后,再运行df.head()看看结果,应该就能得到你想要的星期字符串了。
内容的提问来源于stack exchange,提问作者Harshi Itha
相关产品推荐
相关产品推荐

