3 回答
TA贡献1827条经验 获得超4个赞
您可以使用
df[0].str.replace(fr"\b(?:{'|'.join([x for x in mapping])})\b", lambda x: mapping[x.group()])
正则表达式看起来像\b(?:sweatshirt|shirt)\b,它将匹配sweatshirt或shirt作为整个单词。匹配将被传递给 lambda,并且将使用 获取相应的值mapping[x.group()]。
多字搜索词更新
由于您可能需要在键中搜索多字词mapping,因此您应该确保最长的搜索词在交替组中排在第一位。即,\b(?:abc def|abc)\b而不是\b(?:abc|abc def)\b。
import pandas as pd
mapping = {
"sweat shirt": "sweat_shirt",
"shirt": "shirts"
}
df = pd.DataFrame([
["men sweatshirt"],
["men sweat shirt"]
])
rx = fr"\b(?:{'|'.join(sorted([x for x in mapping],key=len,reverse=True))})\b"
df[0].str.replace(rx, lambda x: mapping[x.group()])
输出:
0 men sweatshirt
1 men sweat_shirt
Name: 0, dtype: object
TA贡献1866条经验 获得超5个赞
试试这个代码 -
mapping = {
" sweatshirt":" sweat_shirt",
" shirt":" shirts"
}
import pandas as pd
df = pd.DataFrame ({'ID':["men sweatshirt", "black shirt"]}
)
df = df.apply(lambda x: ' '+x, axis=1).replace(mapping,regex=True).ID.str.strip()
print(df)
TA贡献1818条经验 获得超3个赞
在您的图案中包含空白!:)
mapping = {
" sweatshirt":" sweat_shirt",
" shirt":" shirts"
}
df = ([
["men sweatshirt"]
])
df = df.replace(mapping,regex=True)
添加回答
举报