数据:
col 1
AL GHAITHA
AL ASEEL
EMARAT AL
LOREAL
ISLAND CORAL
我的代码:
def remove_words(df, col, letters):
regular_expression = '^' + '|'.join(letters)
df[col] = df[col].apply(lambda x: re.sub(regular_expression, "", x))
所需的输出:
col 1
GHAITHA
ASEEL
EMARAT
LOREAL
ISLAND CORAL
SUNRISE
函数调用:
letters = ['AL','SUPERMARKET']
remove_words(df=df col='col 1',letters=remove_letters)
基本上,我想删除开头或结尾提供的字母。 (注意:它应该是单独的字符串) 雾,例如:“ EMARAT AL”应变为“ EMARAT” 请注意,“ LOREAL”不应成为“ LORE”
构建df的代码:
raw_data = {'col1': ['AL GHAITHA', 'AL ASEEL', 'EMARAT AL', 'LOREAL UAE',
'ISLAND CORAL','SUNRISE SUPERMARKET']
}
df = pd.DataFrame(raw_data)
答案 0 :(得分:0)
您可以使用
pattern = r'^{0}\b|\b{0}$'.format("|".join(map(re.escape, letters)))
df['col 1'] = df['col 1'].str.replace(pattern, r'\1').str.strip()
(?s)^{0}\b|(.*)\b{0}$'.format("|".join(map(re.escape, letters))
模式将创建类似(?s)^word\b|(.*)\bword$
的模式,并且它将在整个字符串的开头和结尾与word
匹配。
在检查字符串末尾的单词时,之前的整个文本将被捕获到第1组中,因此替换模式包含\1
占位符以将文本恢复为结果字符串。
如果您的letters
列表中仅包含由字符组成的项目,则可以将map
省略为re.escape
,将map(re.escape, letters)
替换为letters
。
.str.strip()
将删除所有导致的前导/尾随空格。
请参见regex demo。