Функция замены с регулярным выражением ниже ищет номера ровно 16 цифр и маскирует последние 4 цифры.
Итак, этот код:
eg_summaries = [
'blah blah card# visa 5611000043310001',
'blah blah card# visa 5611000043310001 with text after',
'5611000043310001',
'visa: 5611000043310001 and random number > 16 digits: 0011237324763246723487243',
]
df = pd.DataFrame({'summary': eg_summaries })
df['summary'].replace(r'\b(\d{12})\d{4}\b', r'\1****', inplace=True, regex=True)
print (df.summary)
должен распечатать это:
0 blah blah card# visa 561100004331****
1 blah blah card# visa 561100004331**** with text after
2 561100004331****
3 visa: 561100004331**** and random number > 16 digits: 0011237324763246723487243