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

