You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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结构:
包含Number列的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 08:48:25