我有以下数据框架:
df = pd.DataFrame()
data = {'Description':['CERVEZA DORADA BOTELLA NR 24 UNIDADES 350ML', 'BEBIDA DE ALMENDRA COCO SILK 1/6/946 ML WHITE WAVE (1788 UNIDADES)', 'ADES SOYA ORAN TETRA 200MLX10',
'ADES SOYA NATURAL TETRA', 'ADES COCO TETRA']}
df = pd.DataFrame(data)
print (df)
我使用以下代码(字典)创建一个基于特定品牌名称的新列(在本例中为Ades) -在Pandas str.contains中找到的解决方案-在字符串中搜索多个值并在新列中打印值)
brands =['Ades']
def matcher(x):
for i in brands:
if i.lower() in x.lower():
return i
else:
return np.nan
df['Brands'] = df['Description'].apply(matcher)
创建列并应用字典,但不正确。
结果:
,到目前为止,如果它发现ADES的任何组合(如UNIDADES),它就会说是ADES。我想要完成的只是Ades,而不是这两个词的任何组合。这是一个简单的组合,但我有超过1000万张唱片和不同的品牌。如何设置字典只查找那个单词而不是一个组合?
谢谢。
创建一个正则表达式模式提取:
# (?i) insensitive, b word boundary
pat = fr"(?i)b({'|'.join(brands)})b"
df['Brand'] = df['Description'].str.extract(pat, expand=False)
print(df)
# Output
Description Brand
0 CERVEZA DORADA BOTELLA NR 24 UNIDADES 350ML NaN
1 BEBIDA DE ALMENDRA COCO SILK 1/6/946 ML WHITE ... NaN
2 ADES SOYA ORAN TETRA 200MLX10 ADES
3 ADES SOYA NATURAL TETRA ADES
4 ADES COCO TETRA ADES