Замена значений в столбце на основе условий, полученных из шаблонов (возможно, регулярных выражений, если необходимо)

#python #regex #string #symbols

#python #регулярное выражение #строка #символы

Вопрос:

У меня есть столбец домашних адресов, который необходимо «очистить» и предварительно обработать на основе нескольких шаблонов. Например:

введите описание изображения здесь

Я сделал следующее:

 import pandas as pd
import re

df = pd.read_csv("SampleData.csv")
df['Address'] = (df['Address'].str.split()).str.join(' ')
df.head(10)
  

Индекс 1, показывает адрес « 9 (4f7) Adam Road «. Сосредоточение внимания только на » (4f7) »
Шаблон, который он предоставляет, — это пробел, круглые скобки, целое число, символ, круглые скобки, пробел.

Вывод этого адреса должен быть « 9/4 Adam Road «. Следовательно, мне нужно тщательно выбрать первое целое число внутри круглых скобок и поместить его рядом с первым встречающимся целым числом в адресной строке (с косой чертой).

Вторым примером может быть « 1 (Flat 12) Subang Heights, Slateford, »

Вывод второго примера должен быть: « 1/12 Subang Heights, Slateford «. Здесь я должен удалить слово Flat и поместить целое число 12 рядом с первым встречающимся целым числом. Есть вхождения запятой и символов, которые также необходимо удалить.

Что было бы лучшим предложением для решения этой проблемы? Должны ли это быть регулярные выражения или любые другие применимые методы Python?

Может ли кто-нибудь, имеющий опыт работы с такими шаблонами, как этот, помочь мне?

ОБНОВЛЕНИЕ 1 (используемые данные):

 18/8 Andy Pitt Drive
9 (4f7) Adam Road
2nd Floor, 12 China Town
1 Kuala Lumpur Park
23 KingsRoad North
81 (5F2) Prince Street
45/2 Brian's Court
1/2 Ships Corner
9/1 Eagle's Eye
1 (Flat 12) Subang Heights, Slateford,
  

Ответ №1:

Вы можете записать первое число и второе число в две группы, а оставшийся алфавитный адрес — в третью группу, используя это регулярное выражение,

 ^(d )D (d ).*?s ([a-zA-Z] .*?)W*$
  

и замените все на 1/2 3

ДЕМОНСТРАЦИЯ

Дайте мне знать, если у вас возникнут какие-либо проблемы с любым образцом, я уточню регулярное выражение по мере необходимости. Было сложно использовать ваши образцы данных, поскольку вы опубликовали их в виде изображения. Пожалуйста, избегайте публикации в виде изображений и публикации в виде текста.

Пример кода Python,

 import re

arr = ["18/8 Andy Pitt Drive","9 (4f7) Adam Road","2nd Floor, 12 China Town","1 Kuala Lumpur Park","23 KingsRoad North","81 (5F2) Prince Street","45/2 Brian's Court","1/2 Ships Corner","9/1 Eagle's Eye","1 (Flat 12) Subang Heights, Slateford,"]

for s in arr:
 print(s, '-->', re.sub(r'^(d )D (d ).*?s ([a-zA-Z] .*?)W*$', r'1/2 3', s))
  

С принтами,

 18/8 Andy Pitt Drive --> 18/8 Andy Pitt Drive
9 (4f7) Adam Road --> 9/4 Adam Road
2nd Floor, 12 China Town --> 2/12 China Town
1 Kuala Lumpur Park --> 1 Kuala Lumpur Park
23 KingsRoad North --> 23 KingsRoad North
81 (5F2) Prince Street --> 81/5 Prince Street
45/2 Brian's Court --> 45/2 Brian's Court
1/2 Ships Corner --> 1/2 Ships Corner
9/1 Eagle's Eye --> 9/1 Eagle's Eye
1 (Flat 12) Subang Heights, Slateford, --> 1/12 Subang Heights, Slateford
  

Комментарии:

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

2. Единственное, что меня беспокоит, это то, что мне нужно отправить огромный CSV-файл со столбцом (заполненный адресами строка за строкой). Можем ли мы попробовать решение, в котором есть одна функция, которая считывает весь файл CSV, а затем выводит обработанные адреса построчно? В противном случае мне нужно будет скопировать и вставить тысячи адресов в список «arr».

3. @Dinesh: Конечно, попробуйте и дайте мне знать о любых проблемах. Для решения, основанного на функции, я скоро вернусь к вам. Обеденный звонок.

4. 1 (Плоская 12) Высота поддиапазона, Слейтфорд, -> 1/12 Высоты поддиапазона, Слейтфорд, в этом выводе должен быть удален последний символ запятой. Некоторые адреса на самом деле имеют запятые, появляющиеся в начале адреса, такие как: Квартира 3, Мерчистон Парк 9с (для стандартизации всего), было бы неплохо, чтобы регулярное выражение также удаляло эту переднюю запятую.

5. @Dinesh: Извините, меня ждали важные гости, поэтому пришлось уйти. Что касается удаления запятой, появляющейся в конце любого аналогичного символа, не являющегося словом, можно легко удалить с помощью этого регулярного выражения ^(d )D (d ).*?s ([a-zA-Z] .*?)W*$ , позвольте мне обновить код Python в моем ответе.