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

如何在Pandas DataFrame中为列添加含else条件的标签?

如何在Pandas DataFrame中为列添加含else条件的标签?

嘿,我看到你的问题啦,咱们一步步来解决~

首先,你遇到的问题大概率是因为字典定义时的语法错误:你写的label_dict = {'CRIME':1, 'BUSINESS':2, 'SPORTS':3 'ARTS':4}里,'SPORTS':3后面少了个逗号,这会直接导致字典创建失败,后续的apply操作自然会出问题。先把这个小错误修复掉,咱们再看其他优化方案。

方法一:修复你的原代码

把字典的语法修正后,你的apply逻辑本身是完全可行的:

import pandas as pd

data = [['CRIME', 10], ['BUSINESS', 15], ['SPORTS', 12],  ['TRAVEL', 2], ['WELLNESS', 3], ['ARTS', 25]]
df = pd.DataFrame(data, columns=['category', 'no'])

# 修复字典的逗号问题
label_dict = {'CRIME':1, 'BUSINESS':2, 'SPORTS':3, 'ARTS':4}

# 你的apply方法,现在可以正常运行了
df['label'] = df['category'].apply(lambda x : label_dict[x] if x in label_dict else 5)

print(df)

运行后就能得到你想要的结果,未匹配到的TRAVEL、WELLNESS都会被标记为5。

方法二:更简洁的Pandas向量化操作(推荐)

其实Pandas自带的map()函数更适合做这种映射操作,搭配fillna()可以一步搞定,代码更清爽,效率也更高(尤其是数据量大的时候):

df['label'] = df['category'].map(label_dict).fillna(5).astype(int)
  • map(label_dict)会把category列中匹配到字典键的值替换成对应标签,未匹配到的会返回NaN
  • fillna(5)把所有NaN替换成5
  • astype(int)确保标签是整数类型(因为map后可能会变成浮点型)

方法三:用replace实现

你也可以用replace()函数来完成映射,逻辑和上面类似:

df['label'] = df['category'].replace(label_dict).fillna(5).astype(int)

如果担心字符串匹配的问题,可以加上regex=False参数(默认就是False,这里可以明确写出来):

df['label'] = df['category'].replace(label_dict, regex=False).fillna(5).astype(int)

这几种方法都能实现你的需求,其中map()+fillna()是最推荐的,因为它更符合Pandas的向量化操作理念,代码简洁且执行效率高。

备注:内容来源于stack exchange,提问作者Bluetail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:18:06