Извлечение строк из нескольких круглых скобок с использованием регулярного выражения в pandas - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь извлечь несколько строк из нескольких скобок в pandas df и создать новые столбцы.

Следующая строка находится в одном столбце df:

Unfurnished 1 Bdrm 1st flr Flat. Hall. Lounge. Kitch. Bdrm. Shower rm (CT band - A). Deposit & references required. No pets. No smokers. Rent £500 p.m Entry by arr. Viewing Owner 07425 163047 or contact solicitors. Landlord reg: 305350/110/22531. (EPC band - C).

Я пытался извлечь данные диапазона CT и EP C в 2 новых столбца (по одному для каждого набора информации соответственно). Я пробовал несколько версий кода, а также пытался использовать информацию из https://regex101.com/r/5XjNqh/1

Пример: приведенный ниже код

properties['Council_tax']=properties.Description.str.extract('(\(CT[^()*&?%])',expand=False)

возвращает

(CT

Ожидаемый результат:

| Description        | Council_tax_band | EPC_band |
|--------------------|------------------|----------|
| Above string       |        A         |     C    | 
| Example string 2   |        B         |     F    |
| Example string 3   |        C         |     D    |

В то же время слово 'Band' также встречается как 'band' .

Я не думаю, что у меня есть хороший gr asp по правильному использованию регулярных выражений. Есть идеи?

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете использовать

df['Council_tab_band'] = df['Description'].str.extract(r'(?i)\(CT\s+band\s*-\s*([^()]+)\)', expand=False)
df['EPC_band'] = df['Description'].str.extract(r'(?i)\(EPC\s+band\s*-\s*([^()]+)\)', expand=False)

См. демонстрацию регулярного выражения # 1 и демонстрацию регулярного выражения # 2

подробности регулярного выражения

  • (?i) - модификатор без учета регистра
  • \( - a ( char
  • EPC - строка
  • \s+ - 1+ пробелов
  • band - слово band
  • \s*-\s* - дефис, заключенный в пробелы
  • ([^()]+) - Группа 1 : любой 1 или более символов, кроме ( и )
  • \) - символ ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...