DataFrame列模式替换问题:2X6.4T换12T且排除含WOW的行
解决Pandas中指定模式替换并排除特定行的问题
嘿,我明白你遇到的问题了——默认的replace方法是精确匹配整个单元格内容,而不是替换字符串片段,而且你还需要排除包含'WOW'的行不做修改。下面给你两种简单可行的解决方案:
方案1:布尔索引 + str.replace
先筛选出不包含'WOW'的行,再对这些行的Type列进行片段替换:
# 筛选Type列不含'WOW'的行,替换其中的'2X6.4T'为'12T' mask = ~df['Type'].str.contains('WOW') df.loc[mask, 'Type'] = df.loc[mask, 'Type'].str.replace('2X6.4T', '12T')
方案2:用np.where简化逻辑
如果你喜欢更简洁的写法,可以用np.where一行搞定条件判断和替换:
import numpy as np df['Type'] = np.where( ~df['Type'].str.contains('WOW'), df['Type'].str.replace('2X6.4T', '12T'), df['Type'] # 含'WOW'的行保持原样 )
为什么你的原代码没生效?
你原来用的df['Type'].replace(['2X6.4T'],'12T')是精确匹配整个单元格,只有当某个单元格的内容完全等于'2X6.4T'时才会替换,而你的单元格都是长字符串,自然不会生效。而str.replace是专门针对字符串内部片段的替换方法,完全符合你的需求。
验证结果
运行上面的代码后,你的Type列会变成你期望的样子:
Type
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A
AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

