如何替换循环数组中的子字符串

我有以下数据集:


test_column


AB124

3847937BB

HP111

PG999-HP222

1222HP

HP3333-22HP

111HP3939DN

我想按照以下逻辑工作:

  1. 查找测试列中的所有字母

  2. 如果该字母字符串的长度大于 2 并且该字符串中有“HP”的实例,则将其从字符串的其余部分中删除一次。

  3. 如果该字母字符串的长度大于 2 并且该字符串中没有“HP”的实例,则保留整个字符串。

  4. 如果该字母字符串的长度小于或等于 2,则保留整个字符串。

所以我想要的输出看起来像这样:

desired_column


AB

BB

HP

PG

HP

HP

DN

我正在尝试循环,但未能成功生成所需的结果。


for index,row in df.iterrows():

target_value = row['test_column']     #array

predefined_code = ['HP']      #array     

for code in re.findall("[a-zA-Z]+", target_value):  #find all alphabets in the target_column

    if (len(code)>2) and not (code in predefined_code):

        possible_code = code

    if (len(code)>2) and (code in predefined_code):

        possible_code = possible_code.Select(code.replace(predefined_code,'',1))

    if (len(code)<=2):

        possible_code = code


天涯尽头无女友
浏览 176回答 1
1回答

斯蒂芬大帝

由于案例是互斥且完备的,所以逻辑可以简化为“对于长度 > 2 且包含 'HP' 的字母子字符串,删除第一个 'HP',否则保留子字符串原样。”首先使用正则表达式删除每个字符串的非字母部分,然后使用简单的 if-else 语句实现逻辑。import pandas as pdimport redf= pd.DataFrame({'test_column': ['AB124','3847937BB','HP111','PG999-HP222','1222HP','HP3333-22HP','111HP3939DN']})for index,row in df.iterrows():&nbsp; &nbsp; target_value = row['test_column']&nbsp; &nbsp; &nbsp;#array&nbsp; &nbsp; regex = re.compile("[^A-Z]")&nbsp; &nbsp; code = regex.sub('',target_value)&nbsp; &nbsp; if len(code) > 2 and 'HP' in code:&nbsp; &nbsp; &nbsp; &nbsp; possible_code = code.replace('HP','',1)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; possible_code = code&nbsp; &nbsp; print(possible_code)根据需要提供:ABBBHPPGHPHPDN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python