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

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

enter image description here

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

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 Ответ

3 голосов
/ 01 апреля 2019

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

^(\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
...