как заменить подстроку в массиве loop [pandas]

У меня есть следующий набор данных:

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

Всего 1 ответ


Поскольку случаи взаимоисключающие и полные, логика может быть упрощена до

«Для алфавитной подстроки длины> 2 и« HP »в ней удалите первый« HP », иначе сохраните подстроку так, как она есть».

Сначала используйте регулярное выражение для удаления не алфавитных частей каждой строки, а затем реализуйте логику с помощью простого оператора if-else.

import pandas as pd
import re

df= pd.DataFrame({'test_column': ['AB124',�BB','HP111','PG999-HP222',񟠶HP','HP3333-22HP',飇HP3939DN']})

for index,row in df.iterrows():
    target_value = row['test_column']     #array
    regex = re.compile("[^A-Z]")
    code = regex.sub('',target_value)

    if len(code) > 2 and 'HP' in code:
        possible_code = code.replace('HP','',1)
    else:
        possible_code = code
    print(possible_code)

дает по желанию:

AB
BB
HP
PG
HP
HP
DN

Есть идеи?

10000