Python 3 Pandas фильтрует фрейм данных по регулярному выражению и подстановочному знаку - PullRequest
0 голосов
/ 17 сентября 2018

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

Я пытаюсь отфильтровать столбец a для строк 4 и 6. Шаблон состоит из 4 цифр, буквы,пробел, / пробел, 2 числа, пробел, /, пробел, 5 чисел, пробел, /, затем все, что следует.

Фрейм данных выглядит следующим образом:

    a                            b          c            d
0   1234B:Program Name / Title   Chapter    Page Number  ID Code
1   1234B:Program Name / Title   Chapter    Page Number  ID Code
2   1234B:Program Name / Title   Chapter    Page Number  ID Code
3   1234B / 01 / 2               (blank)    (blank)      ID Code
4   1234B / 01 / 23456 / Title   Chapter    Page Number  ID Code   <---- Filter for this
5   1234B / 01 / 2               (blank)    (blank)      ID Code
6   1234B / 01 / 23456 / Title   Chapter    Page Number  ID Code   <---- Filter for this

У меня естьпробовал следующий код:

# Filter by pattern
import pandas as pd
import numpy as np
import re
pattern = re.compile("[0-9][0-9][0-9][0-9][B][\s][/][\s][0-9][0-9][\s][/][\s][0-9][0-9][0-9][0-9][0-9][\s]+[/]")
df = df[df['a'].apply(pattern)]

Результатом является Ошибка типа: объект '_sre.SRE_Pattern' не вызывается.Похоже, я применяю это неправильно.Также мое регулярное выражение не имеет подстановочного знака для учета остальных данных в столбце а.Как питонный способ фильтровать столбец A, чтобы посмотреть на первые 20 символов в столбце A и сопоставить его с шаблоном?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы можете использовать следующее в соответствии с вашими правилами:

df = df[df['a'].str.match(r'\d{4}[a-zA-z]\s\/\s\d{2}\s\/\s\d{5}\s\/.*')]

это дает:

                            a        b            c        d
4  1234B / 01 / 23456 / Title  Chapter  Page Number  ID Code
6  1234B / 01 / 23456 / Title  Chapter  Page Number  ID Code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...