我有以下的Pandas数据框df
(实际上只是一个更大数据框的最后几行):
df
如下:
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)
。
有没有更简单的方法来指定我想要最初正则表达式的反义?
基于这样的正则表达式的过滤效率高吗?
编辑:测试一些提出的解决方案
df.filter(regex="(?!^__)", axis=0)
和df.filter(regex="^\w+", axis=0)
都返回所有行。
根据re
模块文档,\w
特殊字符实际上包括下划线,这解释了第二个表达式的行为。
我猜第一个方案不工作是因为(?!...)
应用于后面的模式。在这里,"^"应该放在外面,就像下面提出的解决方案一样:
df.filter(regex="^(?!__).*?$", axis=0)
有效。
使用df.filter(regex="^(?!__)", axis=0)
也有效。
(?!^__)
might be what you're looking for. Or, maybe even better:^\w+
- Jan[idx for idx in original_df.index if idx not in underscore_df.index]
- blacksite^(?!__).*?$
。 - Robin Koch(?!^__)
选择所有行,因为它匹配每个空字符串,该空字符串不是以换行符和两个下划线开头。所以基本上就是所有内容。 - Robin Koch