Извлечь несколько вхождений строки из столбца dataframe и разобрать в отдельные столбцы - PullRequest
0 голосов
/ 17 апреля 2019

Сценарий

Я разбираю данные из одного столбца данных в несколько столбцов данных.В частности, я хочу разобрать все номера телефонов из столбца, заполненного электронными письмами.После анализа телефонных номеров я хочу удалить эти телефонные номера из исходного столбца электронной почты.

Моя попытка

Я начинаю со столбца в кадре данных, который называется "электронная почта", полностьюсообщений электронной почты.

Я могу успешно проанализировать первое вхождение телефонного номера, используя регулярное выражение, со следующей строкой:

df['phone_num_1'] = df['email'].str.extract('(\(?\d\d\d\)?-? ?\.?\d\d\d-?\.?\d\d\d\d?)')

Запуск этой строкиснова, но с новым именем столбца, захватывает исходный номер телефона снова ...

Я могу удалить все вхождения телефонных номеров, используя следующую строку:

df['email'] = df['email'].replace('(\(?\d\d\d\)?-? ?\.?\d\d\d-?\.?\d\d\d\d?)', '', regex = True)

Теперь все телефонные номера пропали, и я потерял второй телефонный номер.

Что мне нужно помочь с

Если в моем исходном столбце электронной почты есть два вхождения телефонного номеракак мне запечатлеть второе вхождение?В идеале я хотел бы, чтобы это второе появление телефонного номера было выделено в его собственную колонку.

В итоге у меня будет 3 столбца: электронная почта, phone_num_1, phone_num_2

В столбце электронной почты больше не будет номеров телефонов.

Я благодарен за помощь заранее!

Добавление примера электронного письма с фрейма данных

Столбец электронного письма может содержать ячейку со следующей строкой:

Установлен новый тепловой насос.Система работает и работает без утечек.Предоставил арендатору ориентацию на новый тепловой насос.установлен новый водяной тепловой насос Email: example@domain.com |Телефон: (123) 456-7890 Бассейн не работает.Пожалуйста, свяжитесь с резидентом в 234.567.8901.Поставщик платного оборудования для бассейнов и спа-бассейнов Оборудование для бассейнов и спа-салонов 10088

Обратите внимание на два уникальных телефонных номера

Мне нужно, чтобы каждый телефонный номер был извлечен из этой строки и помещен в собственные столбцы.

1 Ответ

0 голосов
/ 17 апреля 2019

Извините, я не понимаю вашего намерения из-за отсутствия информации о вашем фрейме данных. Но, поскольку у вас есть проблема с захватом 2-го номера телефона, это может помочь вам выяснить регулярное выражение. Я заставил его распознать электронную почту, телефон № 1 и телефон № 2.

data = ({"Email":["Installed new heat pump. System is up and running with no leaks. Gave tenant orientation on new heat pump. installed new aqua cal heat pump Email: example@domain.com | Phone: (123) 456-7890 pool heater is not working. Please contact resident at 234.567.8901. Vendor Paid Pool/Spa Heater Equipment Pool/Spa 10088"]})
df = pd.DataFrame(data)

for item in df['Email']:
    reg = re.search(r"(?P<email>\S+\@\S+)\D+(?P<ph1>\d{3}[\D]+\d{3}[\D]+\d{4})?.*(?P<ph2>\d{3}[\D]+\d{3}[\D]+\d{4})",item)
    print(list(reg.groups()))
...