首页 > 解决方案 > 提取和转换特定列中的值

问题描述

我有一个数据框 df,我想在其中找到某个模式,然后用新模式替换它。例如,任何包含:2X6.4T 的值都应替换为12T,如果它包含“单词”WOW ,则不是

数据:

Type

AY12-AYY-AY-R800-900G-2X6.4T_18T-R6-v.A
AY12-AYY-AY-R800-900G-2X6.4T_18T-R6-v.A
AY12-AYY-AY-R800-900G-2X6.4T_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

期望:

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

正在做:

df['Type'] = df['Type'].replace(['2X6.4T'],'12T')

但是,这会消除以下各项的全部值:AY12-AYY-AY-R800-900G-2X6.4T_18T-R6-vA,而不是搜索和替换。

任何建议表示赞赏,我仍在研究这个。

标签: pythonpandasnumpy

解决方案


请使用np.where(condition, string if condition is true, string if condition false)。供选择使用.str,contains()

df['Type']=np.where(df['Type'].str.contains('2X6.4T')&~df['Type'].str.contains('WOW'),df['Type'].str.replace('2X6.4T','12T'),df['Type'])
print(df)

正如@TrentonMcKinney 所建议的,您也可以使用 df.where;

df['Type']=df.where(df['Type'].str.contains('WOW'),df['Type'].str.replace('2X6.4T','12T'), axis=0)
                                  Type
0      AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
1      AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
2      AY12-AYY-AY-R800-900G-12T_18T-R6-v.A
3  AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A
4  AY12-AYY-AY-R800XD-900G-6.4T-R11-WOW-v.A

推荐阅读