Pandas DataFrame如何筛选文本列包含#符号的目标行
pandas筛选文本列包含指定字符的行实现方法
问题说明
现有一个包含两列的DataFrame,样例数据如下:
Index Text 0 READ MY NEW OP-ED: IRREVERSIBLE – Many Effects... 1 #COVID19 is linked to more #diabetes diagnoses... 2 #COVID19: IRREVERSIBLE – Many Effects... 3 READ MY NEW OP-ED: IRREVERSIBLE – Many Effects... 4 Advanced healthcare at your fingertips\nhttps:...
需要仅保留Text列中包含#符号的行,预期输出如下:
Index Text 1 #COVID19 is linked to more #diabetes diagnoses... 2 #COVID19: IRREVERSIBLE – Many Effects...
问题原因
之前运行代码只返回布尔值序列属于正常现象:Series.str.contains()本身的作用就是逐行判断文本是否匹配规则,返回和原数据等长的布尔型序列。没有得到预期筛选结果的核心问题是:
- 仅打印了布尔判断结果,没有将该布尔序列作为筛选条件传入DataFrame完成行过滤
- 多余写了遍历列的循环,该筛选场景不需要逐列遍历操作
- 注意列名大小写匹配:样例数据列名为大写开头的
Text,之前代码里写的小写text如果和实际列名不匹配会直接报错
正确实现代码
直接使用pandas布尔索引规则,将判断条件放入DataFrame的方括号筛选符中即可,不需要写循环:
# na=False用于处理Text列存在空值的场景,避免空值导致运行报错,空值默认判定为不匹配 filtered_df = twt_text[twt_text['Text'].str.contains('#', na=False)]
直接打印filtered_df就能得到预期的筛选结果。
内容的提问来源于stack exchange,提问作者Dim24
相关产品推荐
相关产品推荐

