Pandas регулярное выражение для возврата любой строки, которая содержит U или UN с цифрой - PullRequest
2 голосов
/ 03 марта 2020

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

Положение единиц измерения может варьироваться.

Примеры моих строк:

this is a string and we have 4U to use
this is another string 5UN
only 6U to use today

Мне нужно извлечь числа, которые соединены как с U, так и с UN, поскольку позиции различаются.

df['test_units'] = df['ITEM_DESC'].str.get(r'\(*U.*?\)',)
df['test_units']

Это мое регулярное выражение, но я вернуть только значения нан.

Как мне просто вернуть число, которое соединено с U или UN?

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

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

df['test_units'] = df['ITEM_DESC'].str.extract(r'\b(\d+)UN?\b')

См. Демоверсию regex . Обратите внимание на пару неэкранированных скобок, которые образуют группу захвата , значение которой возвращается Series.str.extract.

Соответствует регулярному выражению:

  • \b - граница слова
  • (\d+) - Группа 1: одна или несколько цифр
  • U - U
  • N? - необязательно N
  • \b - граница слова

Pandas тест:

import pandas as pd
cols={'ITEM_DESC': ['this is a string and we have 4U to use','this is another string 5UN','only 6U to use today']}
df = pd.DataFrame(cols)
df['test_units'] = df['ITEM_DESC'].str.extract(r'\b(\d+)UN?\b')

Выход:

>>> df
                                ITEM_DESC test_units
0  this is a string and we have 4U to use  4        
1  this is another string 5UN              5        
2  only 6U to use today                    6        
>>> 
0 голосов
/ 03 марта 2020

Почему вы хотите U или UN? Это потому что у вас может быть что-то вроде 5UD, которое вам не нужно? В любом случае:

patt = re.compile(r"\d+UN?\b")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...