如何在Pandas DataFrame中实现姓名列的精确匹配查询?
问题描述
我为DataFrame编写了如下搜索函数:
def search_for_name(name, data): print(name) dogs_with_name = data[data["HundenameText"].str.contains(name)] return dogs_with_name[["HundenameText", "GebDatHundJahr", "SexHundLang"]]
但该函数返回的记录超出预期,例如搜索"Luna"时会返回包含"Arina Luna"的记录。我仅需要精确匹配的结果,请问该如何实现?
解决方案
方法1:直接等值匹配
用==进行严格的等值判断,只返回列值与目标字符串完全一致的记录:
def search_for_name(name, data): print(name) dogs_with_name = data[data["HundenameText"] == name] return dogs_with_name[["HundenameText", "GebDatHundJahr", "SexHundLang"]]
方法2:正则精确匹配(支持大小写忽略)
如果需要忽略大小写差异(比如输入"luna"匹配数据中的"Luna"),可以用正则表达式的^(字符串开头)和$(字符串结尾)限定完全匹配范围:
import re def search_for_name(name, data): print(name) dogs_with_name = data[data["HundenameText"].str.match(f'^{name}$', flags=re.IGNORECASE)] return dogs_with_name[["HundenameText", "GebDatHundJahr", "SexHundLang"]]
方法3:处理含前后空格的场景
如果数据中存在带前后空格的名称(比如" Luna "),可以先清理空格再做匹配:
def search_for_name(name, data): print(name) dogs_with_name = data[data["HundenameText"].str.strip() == name.strip()] return dogs_with_name[["HundenameText", "GebDatHundJahr", "SexHundLang"]]
内容的提问来源于stack exchange,提问作者luca köppel
相关产品推荐
相关产品推荐

