Определить буквенно-цифровой шаблон в строке

#python-3.x #pandas #dataframe

#python-3.x #панды #фрейм данных

Вопрос:

Ниже приведен сценарий для упрощенной версии рассматриваемого df:

 import pandas as pd

df = pd.DataFrame({ 
               'reg': ['AAA123', '456BBB','C7C8C9','DDDEEE01010']
                 })
df

    reg
0   AAA123
1   456BBB
2   C7C8C9
3   DDDEEE01010
  

Я хотел бы создать столбец, который представляет буквенно-цифровой шаблон каждого значения reg, с an 'L' для каждой буквы и 'N' для каждого числа.

Пожалуйста, обратите внимание, что reg может различаться по длине и иметь случайное число и порядок букв и цифр.

ПРЕДПОЛАГАЕМЫЙ РЕЗУЛЬТАТ:

     reg          pattern
0   AAA123       LLLNNN
1   456BBB       NNNLLL
2   C7C8C9       LNLNLN
3   DDDEEE01010  LLLLLLNNNNN
  

Любая помощь будет принята с благодарностью.

Ответ №1:

Вы можете использовать replace с regex опцией:

 df['pattern'] = df.reg.replace({'[a-zA-Z]':'L', 'd':'N'}, regex=True)
  

Или, если вы уверены, что ваша строка содержит только буквенно-цифровой символ, вы можете использовать D для alpha:

     df['pattern'] = df.reg.replace({'D':'L', 'd':'N'}, regex=True)
  

Вывод:

            reg      pattern
0       AAA123       LLLNNN
1       456BBB       NNNLLL
2       C7C8C9       LNLNLN
3  DDDEEE01010  LLLLLLNNNNN
  

Комментарии:

1. @TimBiegeleisen Это .replace не .str.replace так . .replace позволяет передавать словарь.

Ответ №2:

Используя str.replace , мы можем попробовать:

 data["pattern"] = data["reg"].str.replace(r'[A-Z]', 'L')
                             .str.replace(r'[0-9]', 'N')