I have a mapper as follows
JavaScript
x
6
1
MAPPER = {
2
'g': ['gm', 'gram', 'grams', 'gms'],
3
'ml': ['mls', 'milli-litre', 'mili-litre', 'milli litre', 'mili litre'],
4
'kg': ['kilo', 'kilo-gram', 'kilo gram', 'kilo grams']
5
}
6
and a pandas series as follows
JavaScript
1
6
1
Salt 500 gm
2
Sugar Powder 500 gm
3
Sugar 500 gm
4
Flour 500 gm
5
Repellent 10 mls
6
I want to change the gm and mls to the key from the mapper such that the result is as follows
JavaScript
1
6
1
Salt 500 g
2
Sugar Powder 500 g
3
Sugar 500 g
4
Flour 500 g
5
Repellent 10 ml
6
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
:
JavaScript
1
9
1
s = s.replace({rf'b{x}b': k for k, v in MAPPER.items() for x in v}, regex=True)
2
print (s)
3
0 Salt 500 g
4
1 Sugar Powder 500 g
5
2 Sugar 500 g
6
3 Flour 500 g
7
4 Repellent 10 ml
8
Name: a, dtype: object
9
If need always repalce unit if last part of strings add $
for match end of strings:
JavaScript
1
2
1
s = s.replace({rf'b{x}b$': k for k, v in MAPPER.items() for x in v}, regex=True)
2