Pandas字典映射多值对应同一字符串问题(非0值变NaN)
问题解决:DataFrame列替换值时非0值变为NaN的问题
问题原因
你使用map()方法时,字典的键是(1,2,3,4,5,6,7,8,9,10)这个元组,但你的caffeine列是浮点型数值(如3.0、1.0)。map()会执行精确匹配,元组和单个数值无法匹配,因此所有非0值都被映射成了NaN。
解决方案
以下几种方法都能解决这个问题,按需选择:
方法1:用np.where做条件判断(最直观)
import numpy as np newerdf['caffeine'] = np.where(newerdf['caffeine'] == 0, 'no', 'yes')
方法2:用replace()方法实现批量替换
newerdf['caffeine'] = newerdf['caffeine'].replace({0.0: 'no'}, 'yes')
这个写法中,第一个字典指定0.0替换为'no',第二个参数'yes'是默认值,所有不匹配第一个字典的元素都会被替换成'yes'。
方法3:lambda函数配合map()
newerdf['caffeine'] = newerdf['caffeine'].map(lambda x: 'no' if x == 0 else 'yes')
方法4:转整数后用字典映射(适用于数值都是整数型浮点数的情况)
如果确认caffeine列的数值都是整数的浮点数(如1.0、2.0),可以先转成int类型再用map:
newerdf['caffeine'] = newerdf['caffeine'].astype(int).map({0: 'no', 1:'yes', 2:'yes', 3:'yes', 4:'yes', 5:'yes', 6:'yes', 7:'yes', 8:'yes', 9:'yes', 10:'yes'})
验证结果
用你提供的示例数据测试后,caffeine列的结果会变成:
0 no 1 yes 2 yes 3 yes 5 yes ... 911 yes 912 yes 913 yes 914 yes 915 yes
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

