使用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
相关产品推荐
相关产品推荐

