当前位置: 首页 > 知识库问答 >
问题:

如何按正则表达式筛选pandas中的行

魏风华
2023-03-14

我想在其中一列上使用正则表达式干净地过滤数据帧。

举一个人为的例子:

In [210]: foo = pd.DataFrame({'a' : [1,2,3,4], 'b' : ['hi', 'foo', 'fat', 'cat']})
In [211]: foo
Out[211]: 
   a    b
0  1   hi
1  2  foo
2  3  fat
3  4  cat

我想使用正则表达式过滤以f开头的行。第一次去:

In [213]: foo.b.str.match('f.*')
Out[213]: 
0    []
1    ()
2    ()
3    []

那不是太有用。然而,这将得到我的布尔索引:

In [226]: foo.b.str.match('(f.*)').str.len() > 0
Out[226]: 
0    False
1     True
2     True
3    False
Name: b

所以我可以这样做我的限制:

In [229]: foo[foo.b.str.match('(f.*)').str.len() > 0]
Out[229]: 
   a    b
1  2  foo
2  3  fat

这让我人为地把一组人加入正则表达式,似乎这不是一个干净的方法。有更好的方法吗?

共有3个答案

苍和裕
2023-03-14

这可能有点晚,但现在在Pandas中通过调用Series.str.match更容易做到这一点。文档解释了匹配FullMatch包含之间的区别。

请注意,要使用结果编制索引,请设置na=False参数(如果要在结果中包含nan,请设置True)。

淳于兴朝
2023-03-14

已经有一个字符串处理函数Series.str.startswith()。您应该尝试foo[foo.b.str.startswith('f')]

结果:

    a   b
1   2   foo
2   3   fat

我认为你所期望的。

或者,您可以将contains与regex一起使用。例如:

foo[foo.b.str.contains('oo', regex= True, na=False)]

结果:

    a   b
1   2   foo

na=False用于在存在nan、null等值时防止出现错误

海信鸥
2023-03-14

而是使用包含:

In [10]: df.b.str.contains('^f')
Out[10]: 
0    False
1     True
2     True
3    False
Name: b, dtype: bool
 类似资料:
  • 我在正确表达ElasticSearch regexp过滤器的regexp时遇到了问题。我正在尝试匹配url字段中“info-for/media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1。为了尝试获得正确的正则表达式,我现在使用,但最终将是带有用户查询字符串的。 发布到localhost:9200/_search 这返

  • 我正在尝试使用python中的正则表达式。我构建了正则表达式,如下所示。我知道用于匹配搜索字符串的开头。我已使用包含多个的匹配模式构建框架,但我不确定将如何尝试匹配搜索字符串中的模式。 我预计会引发错误,关于无效的正则表达式,但它不会引发任何错误,也不会返回任何匹配项。 所以,我的问题是或是有效的正则表达式吗?

  • 本文向大家介绍PowerShell中使用正则表达式筛选数组实例,包括了PowerShell中使用正则表达式筛选数组实例的使用技巧和注意事项,需要的朋友参考一下 本文介绍PowerShell中使用match操作符,配合正则表达式从数组中筛选出想要的内容。 先看下面这个例子: 我们知道ipconfig是显示当前计算机的TCP/IP配置信息的,其中有一项是IP地址。如果有多个网卡,或者一个网站上配置有多

  • 如何简化这个正则呢? 或者是否有其他实现方式(正则)?

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?