如何使用str.contains筛选CSV列中同时包含两个指定关键词的行
结论:你的用法是错误的
pandas.Series.str.contains()的参数定义是str.contains(pat, case=True, flags=0, na=None, regex=True),第一个参数是匹配规则,第二个参数case是控制是否区分大小写的布尔值。你传入的第二个字符串"coronavirus"会被强制转换为布尔值True赋值给case参数,所以你的代码实际运行逻辑是仅筛选text列包含Trump的行,完全没有检查是否包含coronavirus,你现在输出看起来符合预期只是巧合。
你可以检查你提供的CSV测试数据:第4行(独立选民样本)、第5行(Morning Consult样本)的text列都同时包含「Trump」和「coronavirus」,但都没有出现在你的输出结果里,就是该写法错误的直接证明。
正确实现方式
写法1:逻辑与拼接(推荐,可读性最高)
直接写两个匹配条件用&连接即可:
approval_polls[ approval_polls.text.str.contains("Trump") & approval_polls.text.str.contains("coronavirus") ]
如果需要忽略大小写匹配,可以给每个contains加case=False参数。
写法2:正则正向预查(单条件写法)
利用正则的正向预查规则,同时校验两个关键词都存在:
# 区分大小写的写法 approval_polls[approval_polls.text.str.contains(r'^(?=.*Trump)(?=.*coronavirus).*$')] # 忽略大小写的写法 approval_polls[approval_polls.text.str.contains(r'^(?=.*Trump)(?=.*coronavirus).*$', case=False)]
内容的提问来源于stack exchange,提问作者Olaola
相关产品推荐
相关产品推荐

