在Pandas与Numpy中用正则或IN筛选列值的问题求助
解决Pandas DataFrame中提取包含指定子串的单元格问题
嘿,我来帮你搞定这个问题~你当前代码里的问题在于直接用in操作符去判断cycling['qty']这个Series,这在Pandas里是行不通的——in在这里会检查的是Series的索引是否存在,而不是每个元素的内容,所以达不到你想要的效果。
下面给你两种靠谱的解决方案,都能实现你期望的输出:
方法1:使用str.contains(推荐,适合子串匹配)
这是处理字符串包含判断最直接的方式,Pandas的Series提供了str.contains方法,可以逐元素检查字符串是否包含指定子串:
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逐行检查是否包含"_OPTI",再用np.where赋值 cycling['col3'] = np.where(cycling['qty'].str.contains('_OPTI'), cycling['qty'], 'autre') print(cycling)
运行这段代码后,你会得到完全符合预期的输出:
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
如果之后你需要匹配多个子串,可以用正则表达式的或操作符|,比如要匹配包含_OPTI或_TEMP的元素,只需把条件改成:
cycling['qty'].str.contains('_OPTI|_TEMP')
方法2:使用isin(适合精确匹配完整字符串)
如果你之后需要的是精确匹配某几个完整的字符串,而不是子串,就可以用isin方法,比如:
# 假设要精确匹配这两个完整字符串 target_values = ['RONCQ_A2_OPTI_SRV_S3', 'RONCQ_A2_TEMP_SRV_S3'] cycling['col3'] = np.where(cycling['qty'].isin(target_values), cycling['qty'], 'autre')
内容的提问来源于stack exchange,提问作者patrickblancseau
相关产品推荐
相关产品推荐

