如何基于另一个DataFrame的黑名单关键词过滤DataFrame行?
过滤DataFrame中包含黑名单关键词的行
这里给你几种实用的实现方式,根据你的具体需求选择即可:
精确匹配过滤
如果需要精确匹配(原DataFrame目标列的值和黑名单关键词完全一致才过滤),用isin()取反最直接:
# 替换成你实际的DataFrame和列名 original_df = pd.DataFrame({"content": ["apple", "banana", "cherry", "date"]}) blacklist_df = pd.DataFrame({"keywords": ["banana", "date"]}) # 过滤掉content列值在黑名单里的行 filtered_df = original_df[~original_df["content"].isin(blacklist_df["keywords"])]
isin()会生成一个布尔数组,标记哪些行的目标列值存在于黑名单中,~符号用来取反,最终保留不在黑名单里的行。
如果黑名单里有重复关键词,先去重能提升运行效率:
unique_blacklist = blacklist_df["keywords"].unique() filtered_df = original_df[~original_df["content"].isin(unique_blacklist)]
模糊匹配过滤
如果需要模糊匹配(原DataFrame目标列值包含黑名单关键词就过滤),用str.contains()结合正则匹配:
# 把黑名单关键词拼接成正则匹配模式 keyword_pattern = '|'.join(blacklist_df["keywords"].astype(str)) # 过滤掉包含任何黑名单关键词的行,na=False处理空值避免报错 filtered_df = original_df[~original_df["content"].str.contains(keyword_pattern, na=False)]
比如原列值是"banana pie",黑名单有"banana",这行也会被过滤掉。
内容的提问来源于stack exchange,提问作者Tom Woods
相关产品推荐
相关产品推荐

