Найти числа после строки «Цитировать» в столбце данных - PullRequest
0 голосов
/ 03 июля 2018

У меня есть журнал вызовов службы поддержки в листе Excel. Ниже приведен формат данных, которые у меня есть

So#   Comments
1   sjhsh QUOTE 234566
1   sdsds customer call QUote 239876 Call back
2   adsdfh unknown call from customer QUOTE 189067 sdkjsd woieweio 
3   QUOTE 657894 customer called for service

Я читаю эти данные из Excel и мне нужно получить 6 цифр после текста "QUOTE" в каждой строке, а затем добавить извлеченные цифры в качестве нового столбца

1.В строках может быть несколько упоминаний "QUOTE" 2.Строки могут вообще не иметь «QUOTE»

Может кто-нибудь помочь мне с этим поиском подстроки, используя python

import pandas as pd
import re
file=pd.read_excel("C:/Users/rkatta/Desktop/Book1.xlsx")
file.set_index('Index', inplace=True, drop=True)
comments=file['InternalComments']
quotenum=[]

keyword= 'QUOTE'
for i in comments:
    try:
        befor_keyowrd, keyword, after_keyword = comments[i].partition(keyword)
        num=after_keyword[:6]
        quotenum.append(num)
    except AttributeError:
        befor_keyowrd, keyword, after_keyword =''
        quotenum.append(after_keyword)

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вам необходимо заменить часть манипуляции с колонкой следующей строкой:

file['InternalComments'] = file['Comments'].str.findall(r'(?i)quote\s+(\d+)').apply(','.join)

См. Демоверсию regex .

Соответствует регулярному выражению:

  • (?i) - режим без учета регистра
  • quote - подстрока quote
  • \s* - 0+ пробелов
  • (\d+) - Группа захвата 1 (что возвращается findall): 1+ цифр.

См. Демонстрационный пример кода Python:

from pandas import DataFrame
import pandas as pd
l = ['sjhsh QUOTE 234566', 'sdsds customer call QUote 239876 Call back', 'adsdfh unknown call from customer QUOTE 189067 sdkjsd woieweio', 'QUOTE 657894 customer called for service', 'QUOTE 657894 customer called for service QUOTE 657894 customer called for service', 'No qte']
file = pd.DataFrame(l, columns=['Comments'])
file['InternalComments'] = file['Comments'].str.findall(r'(?i)quote\s*(\d+)').apply(','.join)
file
                                            Comments InternalComments
0                                 sjhsh QUOTE 234566           234566
1         sdsds customer call QUote 239876 Call back           239876
2  adsdfh unknown call from customer QUOTE 189067...           189067
3           QUOTE 657894 customer called for service           657894
4  QUOTE 657894 customer called for service QUOTE...    657894,657894
5                                             No qte                 
0 голосов
/ 03 июля 2018

(?i)(?<=QUOTE )\d+ захватит числа, которые вы ищете.

(?i) означает, что остальная часть шаблона не чувствительна к регистру, поэтому она будет соответствовать «Цитировать» и любому варианту слова.

(?<=QUOTE ) означает, что цифрам будет предшествовать слово кавычка и пробел

\d+ ваш номер

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...