Как заменить конкретное слово, сопровождаемое буквенно-цифровым / числовым в pandas python? - PullRequest
0 голосов
/ 14 ноября 2018

Как заменить определенное слово (например, ABC), за которым следует буквенно-цифровое / числовое значение, как показано ниже в pandas

Входные данные

what is ABC s123 doing 77 here?
what is abc  aA574 doing 89 here?
what is ABC-X187 doing here?
what is aBC^984 doing here?
what is Abc647 doing here?

Ожидаемые выходные данные

what is ABCS123 doing 77 here?
what is ABCAA574 doing 89 here?
what is ABCX187 doing here?
what is ABC984 doing here?
what is ABC647 doing here?  

Примечание. Любой буквенно-цифровой код может следовать за ABC.Числа, показанные здесь, являются лишь примерами и не жестко кодируют число в решении.

EDIT1: Только что попробовал предлагаемое решение.Это не работает, когда специальный символ - пробел.Поэтому, пожалуйста, удалите дубликат тега.

РЕДАКТИРОВАТЬ 2: Пожалуйста, обращайтесь с делом ABC в соответствии с вопросом.

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Вы можете использовать этот код:

import re

regex = r"(.*[A-Z]+).*?(\d+.*)"

test_str = """what is ABC 123 doing here?
what is ABC  574 doing here?
what is ABC-187 doing here?
what is ABC^984 doing here?
what is ABC647 doing here?"""

subst = r"\1\2"

result = re.sub(regex, subst, test_str)
print (result)
# what is ABC123 doing here?
# what is ABC574 doing here?
# what is ABC187 doing here?
# what is ABC984 doing here?
# what is ABC647 doing here?

Подробности в regex101: https://regex101.com/r/gGK8fJ/2

0 голосов
/ 14 ноября 2018

из документации Series.str.replace

s = pd.Series("""what is ABC 123 doing here?
what is ABC  574 doing here?
what is ABC-187 doing here?
what is ABC^984 doing here?
what is ABC647 doing here?""".split("\n"))

pattern = r"ABC.*?(\d+)"
s.str.replace(pattern, r"ABC \1")
0    what is ABC 123 doing here?
1    what is ABC 574 doing here?
2    what is ABC 187 doing here?
3    what is ABC 984 doing here?
4    what is ABC 647 doing here?
dtype: object
0 голосов
/ 14 ноября 2018

Вы можете использовать:

df['col'] = df['col'].str.replace(r'(?<=ABC)\W+(?=\d\d\d)', '')

или

df['col'] = df['col'].map(lambda x: re.sub(r'(?<=ABC)\W+(?=\d\d\d)', '', x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...