как заменить подстроку в массиве циклов [pandas] - PullRequest
0 голосов
/ 11 октября 2018

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

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 Ответ

0 голосов
/ 11 октября 2018

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

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

Сначала используйте regex для удаления неалфавитных частей каждой строки, затем реализуйте логику с помощью простого оператора 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...