#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 в моем ответе.