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

1

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

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
Теги:
pandas
arrays
for-loop
loops

1 ответ

1
Лучший ответ

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

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

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

import pandas as pd
import re

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню