我有一个地图,如下所示
MAPPER = {
'g': ['gm', 'gram', 'grams', 'gms'],
'ml': ['mls', 'milli-litre', 'mili-litre', 'milli litre', 'mili litre'],
'kg': ['kilo', 'kilo-gram', 'kilo gram', 'kilo grams']
}和熊猫系列如下
Salt 500 gm
Sugar Powder 500 gm
Sugar 500 gm
Flour 500 gm
Repellent 10 mls我希望将gm和mls更改为映射器中的键,这样结果如下
Salt 500 g
Sugar Powder 500 g
Sugar 500 g
Flour 500 g
Repellent 10 ml我该怎么做呢?
发布于 2021-10-26 11:33:32
首先将二分法的嵌套列表压平为带有单词边界的二叉树,然后传递给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如果需要总是重新计算单元,如果字符串的最后一部分为字符串的匹配结尾添加$:
s = s.replace({rf'\b{x}\b$': k for k, v in MAPPER.items() for x in v}, regex=True)发布于 2021-10-26 11:33:21
一种办法是:
MAPPER = {
'g': ['gm', 'gram', 'grams', 'gms'],
'ml': ['mls', 'milli-litre', 'mili-litre', 'milli litre', 'mili litre'],
'kg': ['kilo', 'kilo-gram', 'kilo gram', 'kilo grams']
}
lookup = { v : k for k, vs in MAPPER.items() for v in vs }
res = ser.str.replace(rf"\b({'|'.join(lookup)})\b", lambda x: lookup[x.group()], regex=True)
print(res)输出
0 Salt 500 g
1 Sugar Powder 500 g
2 Sugar 500 g
3 Flour 500 g
4 Repellent 10 ml
Name: 0, dtype: objecthttps://stackoverflow.com/questions/69722279
复制相似问题