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

如何使用Pandas的.map方法对相似度数据打标?解决打标结果为NaN问题

问题原因

你遇到的全部返回NaN的问题主要有两个核心诱因:

  • 浮点数精度匹配失败:你字典中使用的是0.1、0.2这类精确到1位的浮点键,但Pandas存储浮点数时容易出现精度误差,比如表面显示为0.2的数值实际存储值可能是0.1999999999或者0.2000000001,无法和字典的键完全匹配,就会返回NaN。
  • 数据类型不匹配:如果similarity_score列是字符串类型,和字典的数值型键类型不一致,也会导致匹配失败。
正确实现方案

方案1:先做精度对齐再用字典映射

如果确认所有分数都是保留1位小数的取值,可以先把列数值四舍五入到1位后再做映射:

m2m_similarity['analysis'] = m2m_similarity['similarity_score'].round(1).map({
    0.1: 'slightly-similar', 0.2: 'slightly-similar', 0.3: 'slightly-similar', 0.4: 'slightly-similar',
    0.5: 'similar', 0.6: 'similar', 0.7: 'similar', 0.8: 'similar',0.9: 'similar', 
    1.0: 'Exactly'
})

如果是列本身为字符串类型,直接把字典的键改为对应字符串即可:

m2m_similarity['analysis'] = m2m_similarity['similarity_score'].map({
    '0.1': 'slightly-similar', '0.2': 'slightly-similar', '0.3': 'slightly-similar', '0.4': 'slightly-similar',
    '0.5': 'similar', '0.6': 'similar', '0.7': 'similar', '0.8': 'similar','0.9': 'similar', 
    '1.0': 'Exactly'
})

方案2:通过映射函数实现(更稳妥,无需关心精度/类型问题)

直接定义分段判断的函数传入map,不用写重复的字典键,也能避免精确匹配的问题:

def similarity_tag(score):
    score = float(score) # 兼容字符串类型的分数
    if score <= 0.4:
        return 'slightly-similar'
    elif score <= 0.9:
        return 'similar'
    else:
        return 'Exactly'

m2m_similarity['analysis'] = m2m_similarity['similarity_score'].map(similarity_tag)

内容的提问来源于stack exchange,提问作者wahmulyadi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:09:03