使用any()函数判断DataFrame列含列表任意字符串是否正确
判断DataFrame列是否包含目标列表任意值的方案说明
你当前写的实现存在两处错误,无法得到正确结果:
- 代码中
df = {'number' : '22,33,0' , '33' , '22,0'}不是合法的Python字典,更不是Pandas DataFrame结构,字典要求键值成对出现,这段代码运行会直接抛出语法错误。 - 即使正确构造了DataFrame,直接写
item in df['number']是判断item是否存在于Series的索引中,而非判断单元格内容是否包含目标字符串,返回结果完全不符合预期。
你提到的any(item in 待检测字符串 for item in list_1)写法本身逻辑是成立的,但仅适用于单个字符串的检测,不能直接套在DataFrame的列对象上。
示例参考
对应你截图中的DataFrame结构:
正确的代码实现如下:
import pandas as pd # 构造示例数据 list_1 = ['22','33','44'] df = pd.DataFrame({ 'number': ['22,33,0', '33', '22,0'] })
方案1:子串匹配(写法简洁)
如果不需要严格匹配逗号分隔的完整值,只要单元格内容包含列表内的任意子串就判定为存在,可以用正则匹配的方式:
has_target = df['number'].str.contains('|'.join(list_1)).any()
代码中'|'.join(list_1)会生成正则规则22|33|44,匹配任意一个目标字符串,最后用.any()判断是否存在至少一个匹配项。
方案2:精确匹配(避免子串误判)
如果需要匹配逗号分隔后的完整值,避免出现单元格值为222时被误判为包含22的情况,可以先拆分字符串再判断:
has_target = df['number'].apply( lambda cell_val: any(item in cell_val.split(',') for item in list_1) ).any()
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

