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

使用Python筛选DataFrame中STC列含30的多值行 解决空输出问题

问题原因

你当前使用isin()筛选返回空的核心原因是:STC列存储的是逗号分隔的字符串,而非单个数值。isin()方法只会在单元格内容完全等于列表中的元素时才会匹配成功,你当前的单元格内容是类似30,47,57的字符串,显然不等于整数30,所以没有匹配结果。

正确筛选方法

方法1:正则匹配(适合单次筛选)

用str.contains()配合正则,匹配字符串中存在独立的30的行,同时兼容逗号前后的空格情况:

# 正则规则:匹配字符串开头/逗号 + 任意空格 + 30 + 任意空格 + 逗号/字符串结尾
mask = df['STC'].str.contains(r'(^|,)\s*30\s*(,|$)', na=False)
result = df[mask]

参数na=False是为了处理STC列有空值的情况,避免空值触发报错。

方法2:拆分后判断(适合频繁操作STC单个值的场景)

如果后续经常需要对STC内的单个编码做计算,可以先把STC列拆分成列表,再判断30是否在列表中:

# 按逗号拆分,去除每个元素前后的空格,转为列表
df['STC_list'] = df['STC'].str.split(r'\s*,\s*').fillna('').apply(list)
# 筛选包含30的行,如果需要匹配数值类型30可以转int后判断
result = df[df['STC_list'].apply(lambda x: '30' in x)]

以上两种方法针对你提供的样例数据,都会返回前两行符合条件的结果,过滤掉没有30的第三行。


内容的提问来源于stack exchange,提问作者Bobby

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 10:15:07