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
相关产品推荐
相关产品推荐

