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

Python Pandas生成匹配品牌列报错:'list'对象无'find'属性

解决Pandas创建Brands列时的'list' object has no attribute 'find'错误

嘿,别担心,作为编程新手遇到这种小问题太正常了,我来一步步帮你理清问题并解决它!

错误原因

你遇到的'list' object has no attribute 'find'报错,根源很简单:brandnames是一个列表对象,而find()是只有字符串才有的方法,列表没有这个属性,所以调用brandnames.find(k)肯定会报错。

另外,你原来的列表推导式逻辑也和需求不符——你是在遍历Description的文本,然后检查品牌列表里有没有这个文本,但你的真实需求是检查文本里是否包含某个品牌名,逻辑完全反过来啦。

解决方案

下面给你两种适合新手理解的实现方式,都能完美满足你的需求:

方法1:自定义函数+apply(直观易懂)

这个方法逻辑清晰,每一步都能看明白,特别适合新手:

import pandas as pd

# 读取你的CSV文件(记得把实际路径填进去)
raw = pd.read_csv(r"你的文件路径")
brandnames = ['Amana','Maytag']

# 定义函数:检查描述文本里是否包含目标品牌名
def get_matching_brand(description):
    # 逐个遍历品牌列表
    for brand in brandnames:
        # 如果当前描述文本里包含这个品牌,就返回该品牌名
        if brand in description:
            return brand
    # 如果没有匹配到任何品牌,返回None(你也可以改成空字符串'')
    return None

# 把函数应用到Description列的每一行,生成新的Brands列
raw['Brands'] = raw['Description'].apply(get_matching_brand)

# 查看结果
raw.head()

方法2:用str.extract(更简洁的Pandas风格)

如果想写得更简洁,可以用Pandas内置的字符串处理方法str.extract,它会自动从文本里提取第一个匹配到的品牌名:

import pandas as pd

raw = pd.read_csv(r"你的文件路径")
brandnames = ['Amana','Maytag']

# 把品牌名拼成正则表达式,用|分隔表示"或"的关系
brand_pattern = '|'.join(brandnames)

# 从Description里提取第一个匹配到的品牌
raw['Brands'] = raw['Description'].str.extract(f'({brand_pattern})', expand=False)

raw.head()

这两种方法都能实现你的需求:当Description列包含'Amana'时,Brands列显示'Amana';如果包含'Maytag'就显示'Maytag',都不包含则返回None。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:20