如何在Pandas中检查字符串是否包含非完全匹配的子串
Pandas Series 子串匹配问题解决方案
你现有代码if ("something" in df2["Symptom"].values)的逻辑是判断Symptom列中是否存在完全等于something的元素,仅能实现精确匹配,自然无法识别子串包含的场景。
正确使用str.contains实现需求
str.contains是Pandas官方提供的Series子串匹配方法,返回和原Series长度一致的布尔序列,完全满足你按条件新增列的需求。
1. 按匹配结果新增列
如果需要为每行根据匹配结果返回对应文本,直接使用如下代码:
# 匹配到子串something时新列返回yes,否则返回no df2['匹配结果'] = df2['Symptom'].str.contains('something', na=False).map({True: 'yes', False: 'no'})
常用参数说明:
na=False:原列存在空值NaN时直接返回False,避免空值引发逻辑异常,可根据实际需求调整case=False:添加该参数可忽略大小写匹配regex=False:如果要匹配的子串包含.、+、*、?等正则特殊字符,添加该参数可关闭正则解析,按普通字符串匹配
2. 判断整列是否存在任意匹配项
如果你只需要判断整列是否有至少一个元素包含指定子串,对应你原有打印yes/no的需求,修改后代码如下:
if df2["Symptom"].str.contains('something', na=False).any(): print("yes") else: print("no")
.any()方法会检查布尔序列中是否存在至少一个True,只要有一个元素匹配成功就会返回yes。
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

