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

如何让Pandas的str.contains()匹配完整字符串而非子串?

解决Pandas DataFrame精准匹配完整字符串(非子串)的问题

场景1:匹配单元格内容完全等于目标字符串

如果需要筛选**整个单元格内容恰好是"well"**的行,直接用等值比较结合any(axis=1)即可,支持忽略大小写:

import pandas as pd

data = [['tom', 'wells fargo', 'retired'], ['nick', 'bank of america', 'partner'], ['juli', 'chase', 'director - oil well'], ['lisa', 'well', 'manager']]
df = pd.DataFrame(data, columns=['Name', 'Place', 'Position'])

val = 'well'
# 严格匹配单元格完整内容(区分大小写)
result = df.loc[(df == val).any(axis=1)]

# 忽略大小写的版本
result = df.loc[(df.apply(lambda col: col.str.lower()) == val.lower()).any(axis=1)]
print(result)

场景2:匹配单元格中包含独立的目标单词(排除子串)

如果需要筛选单元格中包含独立的"well"单词(比如"oil well"中的well,排除"wells"这类子串匹配),可以用正则单词边界\b配合str.contains():

val = 'well'
# 用\b确保匹配独立单词,case=False忽略大小写
result = df.loc[df.apply(lambda col: col.str.contains(r'\b' + val + r'\b', case=False)).any(axis=1)]
print(result)

这段代码会返回Position列含"oil well"的行,但不会返回Place列是"wells fargo"的行,符合精准匹配非子串的需求。

原代码问题说明

原代码使用str.contains(val)会匹配所有包含该子串的内容,比如"wells"中的"well"子串也会被命中,而上述两种方法分别针对「完整单元格匹配」和「独立单词匹配」实现了精准筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:00:50