#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')