регулярное выражение с использованием pandas совпадения строк - PullRequest
2 голосов
/ 14 июля 2020

Входные данные:

                        name  Age Zodiac Grade            City  pahun
0                   /extract   30  Aries     A            Aura  a_b_c
1  /abc/236466/touchbar.html   20    Leo    AB      Somerville  c_d_e
2                    Brenda4   25  Virgo     B  Hendersonville    f_g
3     /abc/256476/mouse.html   18  Libra    AA          Gannon  h_i_j

Я пытаюсь извлечь строки на основе регулярного выражения в столбце имени. Это регулярное выражение извлекает числа, длина которых равна 6.

For example:
/abc/236466/touchbar.html  - 236466

Вот код, который я использовал

df=df[df['name'].str.match(r'\d{6}') == True]

Вышеупомянутая строка вообще не совпадает.

Ожидается:

                         name  Age Zodiac Grade            City  pahun
0  /abc/236466/touchbar.html   20    Leo    AB      Somerville  c_d_e
1     /abc/256476/mouse.html   18  Libra    AA          Gannon  h_i_j

Кто-нибудь может сказать мне, где я делаю не так?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

str.match ищет совпадение только в начале строки.

Используйте str.contains с регулярным выражением, например

df=df[df['name'].str.contains(r'/\d{6}/')]

, чтобы найти записи содержащий / + 6 цифр + /.

Или, чтобы убедиться, что вы просто соответствуете 6 di git фрагментов, а не 7+ di git фрагментов:

df=df[df['name'].str.contains(r'(?<!\d)\d{6}(?!\d)')]

где

  • (?<!\d) - убедитесь, что слева нет ди git
  • \d{6} - любых шести цифр
  • (?!\d) - no di git справа не допускается.
0 голосов
/ 14 июля 2020

Почти готово, используйте вместо него str.contains:

df[df['name'].str.contains(r'\d{6,}')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...