You need to enable JavaScript to run this app. Pandas遍历DataFrame列匹配字典键子串并提取的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Pandas遍历DataFrame列匹配字典键子串并提取的实现方法

原代码核心问题定位
  • 变量名大小写拼写错误:Python区分大小写,原代码初始化空列表时定义为myList(L大写),后续追加元素时写为mylist(l小写),二者是完全独立的变量,导致列表写入逻辑完全错位。
  • 误用for...else触发逻辑:Python中for配套的else块,只有在循环全程执行、没有被break中断时才会触发,并非「if条件不满足」就触发。原代码将else与内层遍历字典的for对齐,无论是否匹配到字典键,内层循环结束后都会执行else逻辑追加Not Found,完全打乱匹配流程。
  • 缺少匹配后的中断机制:原代码匹配到字典键后没有终止当前行的遍历流程,也没有标记该行已匹配,导致即使命中目标也会被额外追加Not Found。
修复后的可运行代码
import pandas as pd

# 初始化字典
myDict = {
    'apple': 'FULL FORM',
    'ball' : 'NEW'
}

# 构造测试DataFrame
df = pd.DataFrame({
    'myCol': ['new apple', 'netball', 'hello']
})

# 结果列表统一命名,避免大小写混淆
result_list = []
for index, row in df.iterrows():
    # 提前将当前行文本转小写,统一匹配规则
    current_text = row['myCol'].lower()
    # 内层仅遍历字典键,无需遍历value提升效率
    for key in myDict.keys():
        if key in current_text:
            result_list.append(key)
            # 匹配成功直接break,不再遍历剩余键
            break
    # 正确使用for...else:仅当内层循环未触发break(即无匹配)时执行
    else:
        print(current_text)
        result_list.append('Not Found')

print(result_list)
运行输出结果

针对给定的测试数据,代码执行后输出:
['apple', 'ball', 'Not Found']
完全符合预期需求:

  • 行值new apple包含键apple,提取结果为apple
  • 行值netball包含键ball,提取结果为ball
  • 行值hello无匹配字典键,返回Not Found

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 06:36:04