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

如何将DataFrame中的类别名称替换为对应ID?代码问题求助

问题分析与解决方案

你的代码存在三个核心问题:

  • 字典映射关系搞反:你用ID作为键、类别名称作为值,但实际需要的是类别名称→ID的映射,这样才能通过类别名称找到对应ID。
  • 嵌套循环逻辑错误:dict_categorias[tuplo[1]]会触发KeyError,因为字典的键是ID(tuplo[0]),不是类别名称(tuplo[1])。
  • 遍历效率低下:用iterrows()逐行处理DataFrame,数据量大时性能极差,完全没必要。

正确实现步骤

1. 构建正确的类别映射字典

从IdCat(元组列表,每个元组是(ID, 类别名称))生成反向映射:

# 键:类别名称,值:对应ID
dict_categorias = {tuplo[1]: tuplo[0] for tuplo in IdCat}
# 生成后的字典示例:{'TUBO':1, 'LEITOR':2, 'ANTENA':3, 'POE':4}

2. 用矢量化操作替换类别名称

Pandas提供了两种高效的矢量化方法,比循环快几个数量级:

方法一:使用map(不存在的类别转为NaN)

适合需要把未匹配的类别标记为缺失值的场景:

tabela_new['Categoria'] = tabela_new['Categoria'].map(dict_categorias)

处理后你的示例DataFrame会变成:

Data  Código de barras  Categoria  Valor Uni (€)
0 2022-12-31       5415306102467          2            NaN
1 2022-12-31       3662211007819        NaN            NaN

方法二:使用replace(不存在的类别保留原内容)

适合需要保留未匹配类别名称的场景:

tabela_new['Categoria'] = tabela_new['Categoria'].replace(dict_categorias)

处理后你的示例DataFrame会变成:

Data  Código de barras  Categoria  Valor Uni (€)
0 2022-12-31       5415306102467          2            NaN
1 2022-12-31       3662211007819       CAIXA            NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:02:57