I have a mapper as follows
MAPPER = { 'g': ['gm', 'gram', 'grams', 'gms'], 'ml': ['mls', 'milli-litre', 'mili-litre', 'milli litre', 'mili litre'], 'kg': ['kilo', 'kilo-gram', 'kilo gram', 'kilo grams'] }
and a pandas series as follows
Salt 500 gm Sugar Powder 500 gm Sugar 500 gm Flour 500 gm Repellent 10 mls
I want to change the gm and mls to the key from the mapper such that the result is as follows
Salt 500 g Sugar Powder 500 g Sugar 500 g Flour 500 g Repellent 10 ml
How do I go about doing this?
Advertisement
Answer
First flatten nested list of dict to dictonary with words boundaries and pass to Series.replace
:
s = s.replace({rf'b{x}b': k for k, v in MAPPER.items() for x in v}, regex=True) print (s) 0 Salt 500 g 1 Sugar Powder 500 g 2 Sugar 500 g 3 Flour 500 g 4 Repellent 10 ml Name: a, dtype: object
If need always repalce unit if last part of strings add $
for match end of strings:
s = s.replace({rf'b{x}b$': k for k, v in MAPPER.items() for x in v}, regex=True)