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

如何向pandas DataFrame新增匹配指定关键词的条件列

原代码的问题

你写的代码有3个明显错误:

  • 列名拼写不一致:DataFrame中存储标题的列名是首字母大写的Title,循环读取时写的是全小写的df["title"],运行时会直接触发KeyError。
  • 索引计数器逻辑错误:你把i=0写在了外层遍历标题的循环内部,每处理一条新标题i都会被重置为0,就算匹配到关键词也只会修改第0行的Tekker值,永远不会更新后续行。
  • Pandas链式赋值风险:用df.Tekker[i] = xxx的方式赋值属于链式索引,Pandas无法保证这个赋值操作会生效,很容易出现SettingWithCopyWarning,实际值写不进DataFrame。
推荐实现方案

优先用Pandas内置的字符串向量化操作,不需要写循环,运行效率高,逻辑也更简洁:

import numpy as np
import pandas as pd

# 定义待匹配关键词
keyword_list = ["Saham Assurance", "Attijariwafa bank"]
# 拼接为正则匹配模式
match_pattern = '|'.join(keyword_list)
# 批量提取匹配结果,未命中自动返回NaN
df["Tekker"] = df["Title"].str.extract(f'({match_pattern})', expand=False)

如果你更习惯用循环逻辑,可以参考下面的修正版本,避免自己维护索引导致的错误:

df["Tekker"] = np.nan
keyword_list = ["Saham Assurance", "Attijariwafa bank"]

# 遍历时直接获取行索引和对应标题,不要手动维护计数器
for row_idx, title_text in df["Title"].items():
    for kw in keyword_list:
        if kw in title_text:
            # 用loc做明确的行列定位赋值,避免链式索引问题
            df.loc[row_idx, "Tekker"] = kw
            # 命中第一个关键词就跳出,避免重复匹配
            break

运行以上任意一段代码,都能得到你预期的结果:

TitleLinkTekker
Saham Assurance: Repli de 6% du chiffre d'affaires à fin septembrelink1Saham Assurance
Société anonyme : Tour de vis dans le contrôle des conventions réglementéeslink2NaN
Attijariwafa bank : Baisse drastique du coût du risquelink3Attijariwafa bank

注意:如果你的关键词里包含正则特殊字符(比如.、*、?这类),需要先用re.escape()对每个关键词做转义再拼接模式,避免匹配逻辑出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:16:19