如何通过判断列是否包含列表中任一字符串筛选Pandas DataFrame
筛选包含指定任一字符串的DataFrame行
方法1:正则匹配(高效简洁)
利用str.contains结合正则匹配,是处理这类需求最常用的方法:
import pandas as pd # 构造示例数据 data = pd.DataFrame({ 'ID': [0, 1, 2, 3], 'Names': ["'NameA NameB'", "'NameB'", "'NameB NameC'", "'NameC'"] }) target_names = ['NameA', 'NameC'] # 拼接正则匹配模式 match_pattern = '|'.join(target_names) # 筛选包含任一目标名称的行 filtered_data = data[data['Names'].str.contains(match_pattern)]
执行后filtered_data将保留ID为0、2、3的行,移除ID=1的行。
方法2:逐行检查(直观易懂)
通过apply遍历每行,用any()判断是否存在目标名称:
filtered_data = data[data['Names'].apply(lambda row: any(name in row for name in target_names))]
这种方法逻辑直白,适合数据量不大的场景,无需了解正则语法。
方法3:精准匹配(避免部分匹配)
如果需要严格匹配完整名称(比如防止NameAA被误判为包含NameA),可以先拆分字段再做集合交集检查:
# 去除字符串两端的单引号,按空格拆分名称 split_names = data['Names'].str.strip("'").str.split() # 检查拆分后的名称列表与目标列表是否有交集 filtered_data = data[split_names.apply(lambda x: bool(set(x) & set(target_names)))]
内容的提问来源于stack exchange,提问作者christophriepe
相关产品推荐
相关产品推荐

