如何在Python中筛选Pandas DataFrame含指定关键词的行
问题原因
你用的isin()是精确匹配整个字符串,只有当title列的内容完全等于关键词列表里的某一项时才会被保留。所以索引2的"Simon"能匹配上,但索引0的"Hello Simon, how are you?"因为不是完全等于关键词,就被过滤掉了。
修正方法
下面两种方法都能实现“匹配任意关键词出现”的需求:
方法1:用str.contains结合正则表达式
把关键词列表拼接成用|分隔的正则模式,str.contains会检查字符串是否包含任一关键词:
import pandas as pd keywords = ["Simon", "Mustermann"] # 拼接正则模式,|表示“或”的逻辑 pattern = '|'.join(keywords) # 筛选包含任一关键词的行,case=False可选,用于忽略大小写匹配;na=False处理空值 new_df = df[df["title"].str.contains(pattern, case=False, na=False)]
方法2:用apply+any遍历检查
通过apply对每一行的title执行逻辑判断,用any确认是否有任一关键词在字符串中:
new_df = df[df["title"].apply(lambda x: any(word in x for word in keywords))]
这个方法逻辑更直观,适合对正则不太熟悉的场景。
示例验证
假设你的DataFrame是这样的:
df = pd.DataFrame({ "title": [ "Hello Simon, how are you?", "This is a test", "Simon", "Mustermann is here", "No keyword here" ] })
用上面两种方法筛选后,new_df会保留索引0、2、3的行,完全符合你的需求。
内容的提问来源于stack exchange,提问作者zimon
相关产品推荐
相关产品推荐

