You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:50:22