提取和转换特定列中的值

2024-10-08 18:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧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-v.A,并且不搜索和替换

如果您有任何建议,我将不胜感激,我仍在对此进行研究


Tags: 数据dftype模式单词建议replacewow
2条回答

请使用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

一个选项是.mask,如果条件在某列上,我通常使用它对该列进行条件更改。这是因为默认选项是现有列值

df['Type'] =  df['Type'].mask(~df['Type'].str.contains('WOW'),
                              df['Type'].str.replace('2X6.4T','12T'))
df
Out[1]: 
                                       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

.where回答,这类似于掩模的“逆”:

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

相关问题 更多 >

    热门问题