首页 > 解决方案 > 这些字符是否具有某种映射功能?“[1]”、“[2]”、“[3]”、...、“[n]”

问题描述

我正在使用这行代码

df_mask = ~df[new_col_titles[:1]].apply(lambda x : x.str.contains('|'.join(filter_list), flags=re.IGNORECASE)).any(1)

为我的 df 创建一个蒙版。过滤器列表是

filter_list = ["[1]", "[2]", "[3]", "[4]", "[5]", "[6]", "[7]", "[8]","[9]",..."[n]"]

但是我得到了奇怪的结果,我希望它只会过滤 df 的第 0 列中包含的行[1]...[n]。但它不是也在过滤没有这些元素的行。有一些模式它虽然。它将过滤掉具有“字符”数字的行,我的意思是£55, 2010), 55*, 55 *

谁能解释发生了什么以及是否有解决方法?

标签: pythonpandasfiltercharacter

解决方案


如果要完全匹配过滤器列表中的项目,请使用re.escape()转义特殊字符。[1]是只匹配数字1而不是字符串的正则表达式[1]

df_mask = ~df[new_col_titles[:1]].apply(lambda x : x.str.contains('|'.join(re.escape(f) for f in filter_list), flags=re.IGNORECASE)).any(1)

请参阅参考资料 - 这个正则表达式是什么意思?


推荐阅读