我有下面的panda Dataframe df
(实际上这只是一个更大的 Dataframe 的最后几行):
count
gene
WBGene00236788 56
WBGene00236807 3
WBGene00249816 12
WBGene00249825 20
WBGene00255543 6
__no_feature 11697881
__ambiguous 1353
__too_low_aQual 0
__not_aligned 0
__alignment_not_unique 0
我可以使用filter
的regex
选项只获取以两个下划线开头的行:
df.filter(regex="^__", axis=0)
这将返回以下内容:
count
gene
__no_feature 11697881
__ambiguous 1353
__too_low_aQual 0
__not_aligned 0
__alignment_not_unique 0
实际上,我想要的是补语:仅限于不以两个下划线开头的行。
我可以用另一个正则表达式来实现:df.filter(regex="^[^_][^_]", axis=0)
.
- 是否有一种方法可以更简单地指定我想要初始正则表达式的逆表达式?**
- 这种基于regexp的筛选有效吗?**
编辑:测试一些建议的解决方案
df.filter(regex="(?!^__)", axis=0)
和df.filter(regex="^\w+", axis=0)
都返回所有行。
根据re
模块文档,\w
特殊字符实际上包括下划线,这解释了第二个表达式的行为。
我猜第一个方法不起作用,因为(?!...)
适用于遵循模式的内容。这里,"^"应该放在外面,如下面提出的解决方案:df.filter(regex="^(?!__).*?$", axis=0)
工作。df.filter(regex="^(?!__)", axis=0)
也是如此。
4条答案
按热度按时间wn9m85ua1#
我遇到了同样的问题,但是我想过滤列。因此我使用axis=1,但是概念应该是相似的。
az31mfrm2#
匹配所有没有两个前导下划线的行:
^(?!__)
^
匹配行的开头(?!__)
确保该行(前一个^
匹配项之后的行)不以两个下划线开头**编辑:**删除了
.*?$
,因为不需要过滤行。piok6c0g3#
这里有两种可能性:
或者:
laik7k3q4#
反向选择多列(A、B、C)。