Как исправить это регулярное выражение и функцию, чтобы проверить правильность шаблона значения столбца pandas? - PullRequest
2 голосов
/ 14 января 2020

Я хотел бы проверить, что строки в моем столбце pandas соответствуют указанному шаблону c. Я хочу сделать это с помощью функции check_pattern и регулярного выражения. Данные должны состоять только из цифр, за исключением того, что после первых двух цифр стоит da sh. Правильное значение будет 08-15643. Неправильные значения могут быть, например, 07-456d, 04-47897-1, 084564 и т. Д. c.)

Пожалуйста, посмотрите на данные и мой код:

df = pd.DataFrame(str_list)
str_list = ['19-123', '08-156445787', '08-156468787-1']
df.rename(columns={df.columns[0]: "Strings" }, inplace = True)

def check_pattern(Strings):
    is_correct_pattern = False
    pattern = re.compile("^[0-9]{2}'-'[0-9]")
    if pattern.match(Strings) == True:
        is_correct_pattern = True
   return is_correct_pattern

df['Correct_pattern'] = df['Strings'].apply(lambda x: check_pattern(x))

Мой вывод должен быть исходным фреймом данных df с дополнительным столбцом Correct_Pattern. С данными df, результат должен быть True, True, False для этого столбца. Если у вас есть другая идея для решения этой проблемы, мне также интересно :)

1 Ответ

2 голосов
/ 14 января 2020

Вы хотите использовать Series.str.match метод , чтобы увидеть, соответствует ли шаблон строке:

df['Correct_pattern'] = df['Strings'].str.match(r'^\d{2}-\d+$')

Шаблон ^\d{2}-\d+$ соответствует началу строки (^, обратите внимание, что это избыточно с re.match, но лучше сохранять якорь явно), затем 2 цифры, - и затем \d+ соответствуют любым цифрам от 1+, а затем утверждают позицию в конце строки с помощью $ якорь.

При str_list = ['19-123', '08-156445787', '08-156468787-1'] на входе вывод:

>>> df
          Strings  Correct_pattern
0          19-123             True
1    08-156445787             True
2  08-156468787-1            False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...