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

pandas DataFrame循环匹配列表值新增列出现AttributeError报错问题

问题原因分析
  • 遍历逻辑错误:for row in df.iloc[:,3:10] 这种写法遍历出来的是列名字符串,不是每行的内容,所以调用.str方法直接报错,这是AttributeError的直接诱因。
  • 变量使用错误:首先不要用Python内置关键字list作为变量名,会覆盖内置功能;其次你的代码里循环关键词时一会用list一会用birds,变量名不一致也会引发报错。
  • 赋值逻辑错误:df['sort'] == i 是相等判断语句,不是赋值操作,就算遍历逻辑对也不会给新列写入值,另外你报错代码里写的df['soort']属于拼写错误,和需求的sort列名不一致。
  • 匹配逻辑漏洞:没有考虑大小写匹配问题,你的数据里存在Bird、Birdstrike等首字母大写的内容,默认大小写敏感的str.contains会匹配不到小写的bird关键词。
解决方案

两种实现方式,大数据量场景优先选第二种向量化操作:

方法1:逐行匹配(逻辑易懂,适合小数据量)

import pandas as pd
# 匹配关键词列表,不要用list做变量名
match_list = ['bird', 'rabit', 'rat', 'bat']

def get_match(row):
    # 遍历当前行指定列的所有内容
    for text in row.astype(str):
        for keyword in match_list:
            # 大小写不敏感匹配
            if keyword.lower() in text.lower():
                return keyword
    return None

# 应用函数生成新列
df['sort'] = df.iloc[:,3:10].apply(get_match, axis=1)

方法2:向量化操作(执行效率更高)

match_list = ['bird', 'rabit', 'rat', 'bat']
# 把指定列的每行内容拼接成单个字符串,统一转小写
merged_text = df.iloc[:,3:10].fillna('').astype(str).agg(' '.join, axis=1).str.lower()
df['sort'] = None
# 逐个关键词匹配赋值
for keyword in match_list:
    df.loc[merged_text.str.contains(keyword, case=False, na=False), 'sort'] = keyword

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:54:07