Подберите группу захвата для данного шаблона в столбце панд - PullRequest
2 голосов
/ 27 мая 2019

У меня есть DataFrame 'tdf' со столбцом "Cars", где значения - это 4 буквы, а затем 1-6 цифр.

Cars
JAXT450678
KYXS 56746
LMOP01456
...

Я скомпилировал регулярное выражение, чтобы соответствовать ему:
r'(?=[a-zA-Z]{4}\s*\d{1,6}\b)([a-zA-Z]{4})(\s?\d+)'

Что я хочу сделать, так это убрать пробелы, а затем убедиться, что если во второй группе меньше 6 цифр, вставьте 0, начиная со второй, до тех пор, пока не будет достигнут счет 6, чтобы результат :

Cars
JAXT450678
KYXS056746
LMOP001456
...

Любая помощь приветствуется. Я попытался поиграться с .replace и .sub и могу заставить его заменить весь матч, но я не знаю, как ссылаться на группу и иметь динамическое совпадение.

tdf = tdf.replace(r'(?=[a-zA-Z]{4}\s*\d{1,6}\b)([a-zA-Z]{4})(\s?\d+)','000000', regex = True)

Ответы [ 3 ]

2 голосов
/ 27 мая 2019

Используйте замену для замены пробела и zfill для заполнения числовой части строки,

df['Cars'].str.replace(' ', '').apply(lambda x: x[:4] + x[4:].zfill(6))

0    JAXT450678
1    KYXS056746
2    LMOP001456
2 голосов
/ 27 мая 2019

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

df['Cars'] = df['Cars'].str.replace(r'^([a-zA-Z]{4})\s*(\d{1,6})$', lambda x: "{}{}".format(x.group(1), x.group(2).zfill(6)))

Подробности

  • ^ - соответствует началу строки
  • ([a-zA-Z]{4})- Группа 1: четыре буквы
  • \s* - 0+ пробелов
  • (\d{1,6}) - Группа 2: от 1 до 6 цифр
  • $ - конец строки.

Значение lambda x: "{}{}".format(x.group(1), x.group(2).zfill(6)) вызываемой конкатулы группы 1 и значения группы 2, которое дополняется нулями до 6 позиций.

Так как \s* не в скобках, пробельные символы совпадаютс этим шаблоном опускаются из результата.

1 голос
/ 27 мая 2019

Не совсем одна строка, но вы можете избежать apply:

s = df.Cars.str.slice(4).str.strip().str.zfill(6)
df.Cars.str.slice(0,4) + s

Вывод:

0    JAXT450678
1    KYXS056746
2    LMOP001456
Name: Cars, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...