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

如何利用字典为DataFrame添加分类列?

问题分析

你之前的代码用df['Item'].map(dict)是完全匹配Item列的完整字符串,但你的Item列是包含字典键的长文本,自然无法匹配,会返回NaN。要解决这个问题,需要改成包含匹配的逻辑——检查Item文本中是否存在字典的键,再返回对应的分类。

另外注意:不要用dict作为变量名,它是Python内置类型,会覆盖原有功能,建议改成category_map这类名称。

解决方案

方案一:apply+自定义函数(逻辑直观)

遍历每个Item文本,检查是否包含字典中的键,找到匹配项后返回对应分类:

import pandas as pd

# 重命名字典,避免覆盖内置类型
category_map = {'apple':'fruit', 'grape':'fruit', 'chickpea':'beans','coffee cup':'tableware'}

# 构建你的示例DataFrame
data = {
    'Item': ['apple from happy orchard', 'grape from random vineyard', 
             'chickpea and black bean mix', 'coffee cup with dog decal'],
    'Cost': [15, 20, 10, 14]
}
df = pd.DataFrame(data)

# 自定义匹配函数
def get_category(item_text):
    for key, category in category_map.items():
        if key in item_text:
            return category
    return None  # 无匹配时返回None,可替换为默认值如'unknown'

# 添加分类列
df['Category'] = df['Item'].apply(get_category)

方案二:正则提取+映射(效率更高)

把字典的键转成正则备选模式,提取出匹配的键后再映射分类,适合数据量较大的场景:

import pandas as pd

category_map = {'apple':'fruit', 'grape':'fruit', 'chickpea':'beans','coffee cup':'tableware'}

data = {
    'Item': ['apple from happy orchard', 'grape from random vineyard', 
             'chickpea and black bean mix', 'coffee cup with dog decal'],
    'Cost': [15, 20, 10, 14]
}
df = pd.DataFrame(data)

# 把字典键转成正则模式,长键放前面避免短键优先匹配(比如先匹配'coffee cup'而非'cup')
pattern = '|'.join(sorted(category_map.keys(), key=len, reverse=True))
# 提取匹配的键
df['matched_key'] = df['Item'].str.extract(f'({pattern})', expand=False)
# 映射得到分类
df['Category'] = df['matched_key'].map(category_map)
# 可删除临时列
df = df.drop('matched_key', axis=1)

两种方案都能得到你需要的结果:

ItemCostCategory
apple from happy orchard15fruit
grape from random vineyard20fruit
chickpea and black bean mix10beans
coffee cup with dog decal14tableware

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:21:10