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)
添加回答
舉報