在Pandas与Numpy中实现正则/IN匹配提取DataFrame列内容求助
问题分析
你现在的问题出在"_OPTI" in cycling['qty']这个判断上——当你对Pandas的Series使用in操作符时,它检查的是目标值是否存在于Series的索引中,而不是每个单元格的字符串内容里是否包含这个子串,所以这行代码无法达到你想要的筛选效果。
解决方案
要实现“筛选并保留包含特定子串的单元格”,你可以使用Pandas的str.contains()方法,它专门用于检查Series中每个字符串元素是否包含指定的子串(支持正则表达式)。
修正后的代码
import pandas as pd import numpy as np cycling = pd.DataFrame( { 'qty' : ['RONCQ_A2_OPTI_SRV_S3','RONCQ_A3_SRV_S3','RONCQ_A2_TEMP_SRV_S3','RONCQ_A2_SRV_S3','RONCQ_A2_PC_SRV_S3'], } ) # 使用str.contains检查每个qty元素是否包含"_OPTI" cycling['col3'] = np.where(cycling['qty'].str.contains("_OPTI"), cycling['qty'], 'autre') print(cycling)
扩展:匹配多个子串的情况
如果你之后需要匹配多个子串(比如同时包含_OPTI或_TEMP),可以用正则表达式的或操作|:
cycling['col3'] = np.where(cycling['qty'].str.contains("_OPTI|_TEMP"), cycling['qty'], 'autre')
运行结果
执行修正后的代码后,输出会和你期望的一致:
qty col3 0 RONCQ_A2_OPTI_SRV_S3 RONCQ_A2_OPTI_SRV_S3 1 RONCQ_A3_SRV_S3 autre 2 RONCQ_A2_TEMP_SRV_S3 autre 3 RONCQ_A2_SRV_S3 autre 4 RONCQ_A2_PC_SRV_S3 autre
内容的提问来源于stack exchange,提问作者patrickblancseau
相关产品推荐
相关产品推荐

