如何基于数组中的部分匹配删除DataFrame中的行
实现部分匹配删除DataFrame行的方案
单列匹配(以姓氏列为例)
你可以利用str.contains()结合正则表达式实现部分匹配,把姓名数组转成用|分隔的匹配模式,就能检查单元格是否包含数组中的任意关键词,再取反筛选保留不需要删除的行。
示例代码:
import pandas as pd # 模拟数据 df = pd.DataFrame({ 'First Name': ['John', 'Alice', 'Bob'], 'Last Name': ['Smith-West', 'Johnson', 'Smith'] }) names = ['smith', 'john'] # 构建正则匹配模式,case=False忽略大小写(按需调整) match_pattern = '|'.join(names) # 筛选出姓氏不包含数组元素的行 df = df[~df['Last Name'].str.contains(match_pattern, case=False)]
多列同时匹配(名字或姓氏任一匹配即删除)
如果需要检查名字或姓氏任意一列包含数组元素就删除,可以用apply配合any()实现:
# 检查名字/姓氏列是否存在匹配项 match_mask = df[['First Name', 'Last Name']].apply(lambda col: col.str.contains(match_pattern, case=False)).any(axis=1) # 取反保留未匹配的行 df = df[~match_mask]
注意事项
- 如果姓名数组里包含正则特殊字符(比如
.、*、+),需要用re.escape()转义,避免语法冲突:import re match_pattern = '|'.join(re.escape(name) for name in names) - 去掉
case=False参数可开启严格大小写匹配。
内容的提问来源于stack exchange,提问作者Muzzy
相关产品推荐
相关产品推荐

