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

基于另一列关键词为DataFrame新增分类列的问题

解决方法

报错原因

你遇到的'str' object has no attribute 'str'错误,是因为row['name']是单个字符串值,而.str是pandas Series/Index专属的字符串访问器,单个字符串对象没有这个属性,所以不能这么用。

推荐方案(适合大型DataFrame,效率优先)

直接对name列做矢量化字符串匹配,这是pandas处理大数据量的最优方式,比apply快得多:

import numpy as np

# 定义关键词列表
climate = ['environment', 'climate', 'global warming']
# 拼接成正则匹配模式
pattern = '|'.join(climate)

# 新增sub_category列,匹配成功赋值'Climate',否则设为None(或你需要的默认值)
df['sub_category'] = np.where(
    df['name'].str.contains(pattern, case=False),
    'Climate',
    None  # 这里可以替换成其他默认分类,比如'Other'
)

如果需要匹配完整单词(避免类似environmental这类衍生词被误判),可以调整正则模式:

# 匹配完整单词的正则规则
pattern = r'\b(' + '|'.join(climate) + r')\b'
df['sub_category'] = np.where(df['name'].str.contains(pattern, case=False), 'Climate', None)

如果你一定要用apply(适合复杂多分类逻辑)

修改函数,直接对单个字符串做匹配,不用.str访问器:

方法1:正则匹配

import re

climate = ['environment', 'climate', 'global warming']
# 预编译正则,提升循环匹配效率
pattern = re.compile('|'.join(climate), re.IGNORECASE)

def sub_cat(row):
    if pattern.search(row['name']):
        return 'Climate'
    # 这里可以添加其他分类的判断逻辑
    return None

df['sub_category'] = df.apply(sub_cat, axis=1)

方法2:关键词包含检查

climate = ['environment', 'climate', 'global warming']

def sub_cat(row):
    name_lower = row['name'].lower()
    for keyword in climate:
        if keyword in name_lower:
            return 'Climate'
    return None

df['sub_category'] = df.apply(sub_cat, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:12